Мне стало итересно поговорить об AJAX не только как о средстве для повышения комфорта пользователя но и для снижения нагрузки на сервер. Есть концепция построения интерфейса полностью на JS и HTML, а сервер передает только данные для отображения, без единой строчки HTML. Все сразу конечно переводить не обязательно, но там где имеется смысл можно использовать.
Когда мы используем AJAX, нам уже как минимум не надо обрабатывать шаблон страницы, меньше запросов к БД. Возникает вопрос на сколько такой подход ускоряет Drupal, что выполняется, а что нет и как это можно оптимизировать еще больше, если нужно?
Я создал в меню callback:
$items['userphotos/%'] = array(
'title' => t('Marked user photos'),
'page callback' => 'photomarks_see_user_photos',
'page arguments' => array(1),
'access arguments' => array('see user marked photo'),
'type' => MENU_CALLBACK,
'file' => 'photomarks.inc'
);
function photomarks_see_user_photos($arg){
drupal_json(array('$arg' => $arg));
exit;
}
?>
и прогнал пару тестов, дважды загпросил главную страницу:
запросил вызов своей функции:
Как видно ускорение в 2-3 раза. Гораздо меньше время выполнения файлов theme.inc и database.mysqli.inc
Какие еще интересные мысли, идеи есть?
Комментарии
Спасибо, интересно.
А не думаете ли, что что нагрузка сервера просто перераспределяется на выдачу вызова JS.
А чем статистика модулей выводится?
не совсем понял. JS выполняется у клиента
IDE + Debugger http://drupal.ru/node/22377
интересно
хочу практическую реализацию
Используя jQuery и пару модулей к нему (например, Ajaxify), можно сделать сайт ПОЛНОСТЬЮ аяксовым, вот только тут глвное не перегнуть палку, поскольку тормоза в браузере -- очень неприятная штука. А вообще, идея хороша, запомню этот прием...
К автору,
а можно чуток поподробнее расписать, что вы сделали в вашем примере? спасибо.
Ajaxify - только под пятерку
я для экспериментов использовал модуль отметок на фото, который писал для своего проекта:
<?php
// Используем hook_menu(), чтобы по переходу http://mysite.net/userphotos/ вызывалась наша
//функция
// подробнее: http://api.drupal.org/api/function/page_example_menu/6
function photomarks_menu() {
$items['userphotos/%'] = array(
'title' => t('Marked user photos'),
'page callback' => 'photomarks_see_user_photos',
'page arguments' => array(1),
'access arguments' => array('see user marked photo'),
'type' => MENU_CALLBACK,
'file' => 'photomarks.inc'//функция лежит в файле photomarks.inc
);
return $items;
}
function photomarks_see_user_photos($uid){
drupal_json(array('$arg' => $arg));// передаем клиенту данные в формате JSON
exit;// завершаем работу скрипта, иначе друпал вернет еще и полную страницу
}
?>
вот простой модуль, который в своей работе использует AJAX http://drupal.ru/node/21392 Там почему-то exit() можно не использовать после drupal_json(), он итак завершает работу. В чем причина не знаю.