AJAX во имя ускорения

Главные вкладки

Аватар пользователя nleo nleo 17 декабря 2008 в 19:26

Мне стало итересно поговорить об 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

Какие еще интересные мысли, идеи есть?

Комментарии

Аватар пользователя Dimm Dimm 17 декабря 2008 в 20:57

Спасибо, интересно.
А не думаете ли, что что нагрузка сервера просто перераспределяется на выдачу вызова JS.
А чем статистика модулей выводится?

Аватар пользователя nleo nleo 18 декабря 2008 в 6:12

"Dimm" wrote:
А не думаете ли, что что нагрузка сервера просто перераспределяется на выдачу вызова JS.
А чем статистика модулей выводится?

не совсем понял. JS выполняется у клиента

"Dimm" wrote:
А чем статистика модулей выводится?

IDE + Debugger http://drupal.ru/node/22377

Аватар пользователя kyky kyky 18 декабря 2008 в 11:30

Используя jQuery и пару модулей к нему (например, Ajaxify), можно сделать сайт ПОЛНОСТЬЮ аяксовым, вот только тут глвное не перегнуть палку, поскольку тормоза в браузере -- очень неприятная штука. А вообще, идея хороша, запомню этот прием...

Аватар пользователя nleo nleo 19 декабря 2008 в 15:52

я для экспериментов использовал модуль отметок на фото, который писал для своего проекта:

<?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(), он итак завершает работу. В чем причина не знаю.