Скорость работы AJAX

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

Аватар пользователя kwas kwas 23 июня 2011 в 15:54

Для знакомства с яваскрипт технологиями друпала установил группу модулей "Examples for Developers" (http://drupal.org/project/examples)
и обратил внимание, что ожидаемого мгновенного получения результата на странице не оказалось. Наоборот. Есть среди примеров аналогизные по функционалу, но разные по технологии реализации страницы:
- Dependent dropdown (with graceful degradation)
- Dependent dropdown with javascript off
На обеих выводится выпадающий список из 4 пунктов и при выборе одного из этих пунктов меняется содержимое второго выпадающего списка.
Если AJAX не использовать, то с полной перерисовкой страницы результат получается через несколько сек. Визуально (если страница не прокручена вниз) на экране меняется только та область, где перерисовывается второй список. Если же задействован AJAX, то ждать приходится немного дольше. Плюс передергивание страницы.
Страницы примеров генерируются с помощью функций, и к БД за какими-нибудь данными обращения не происходит.
Почему же так долго!? Может быть как-то можно ускорить AJAX...

Комментарии

Аватар пользователя kwas kwas 23 июня 2011 в 18:01

"Ильич Рамирес Санчес" wrote:
возьмите firebug
откройте панель "сеть" и посмотрите что там происходит.

Я, конечно, очень извиняюсь, но хотелось бы по-подробнее, на что там обратить внимание.

Аватар пользователя ihappy ihappy 23 июня 2011 в 17:06

"kwas" wrote:
Я, конечно, очень извиняюсь, но хотелось бы по-подробнее, не что там обратить внимание.

Подробней наверно только в книге будет.

Аватар пользователя kwas kwas 23 июня 2011 в 17:55

"xxandeadxx" wrote:

вот обязательно было носом тыкать...
да, смешно, но и Вы тоже когда-то учились ходить, пить, материться.
я часто слышу вопросы типа: "я тут что-то нажала, у меня все зависло, на какую клавишу мне теперь нажать..."
и ни чё!

Аватар пользователя kwas kwas 23 июня 2011 в 18:00

"Ильич Рамирес Санчес" wrote:
ну а вы себе представляете как AJAX работает или AHAH? :)

AHAH, на сколько я понял, - прежнее название той же технологии.
AJAX позволяет параллельно выполнять скрипты на стороне браузера и запросы к серверу. Когда сервер подготовит ответ, данные обрабатываются и (в частном случае, как это здесь и происходит) могут выдаваться на экран.
Выигрыш обычно ожидается от того, что не нужно перерисовывать ВСЮ страницу. По специальным меткам (например по ID) на странице находятся "нужные" элементы и в них выводятся данные.
У меня вот такое смутное представление

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 23 июня 2011 в 19:27

ок.
у Drupal при изменении формочки можно повесить события ahah. не ajax все же потому что гоняются там именно html куски насколько я знаю.

Что происходит.
например по селекту должен выводиться еще один компонент формы, например поле ввода.

итак. вы выбираете опцию. JS Drupal делает запрос на сервер(со всеми введенными полями формы, кстати). Сервер отдает ответ по истечение некоторого времени с куском кода формы, который надо показать. Кусок формы показывается(ну или еще что с ним происходит).

схема такая.
действие юзера -> срабатывает JS(из тех что в папочке /misc лежат насколько я помню) -> http запрос серверу -> перерисовка формы согласно ответу и заданным правилам.

Окей. что происходит на сервере.
Друпал получает на только данные формы но и ее идентификатор. По нему друпал лезет в кеш форм(это время), потом меняет форму(могут кстати отрабатывать все hook_form_alter других модулей), то есть можно считать что по http запросу форма полностью перестраивается, кладется обратно в кеш в новом виде, отдается ее структура на клиентсвий браузер.

Отсюда - перестройка формы по запросу - и ваше видимое падение скорости на которуе вы жалуетесь.

ЗА тем, что происходит на сервере рекомендую код ядра читать.

Аватар пользователя kwas kwas 23 июня 2011 в 20:21

"Ильич Рамирес Санчес" wrote:
Друпал получает на только данные формы но и ее идентификатор. По нему друпал лезет в кеш форм(это время), потом меняет форму(могут кстати отрабатывать все hook_form_alter других модулей), то есть можно считать что по http запросу форма полностью перестраивается, кладется обратно в кеш в новом виде, отдается ее структура на клиентсrий браузер.
Отсюда - перестройка формы по запросу - и ваше видимое падение скорости на которуе вы жалуетесь.

Спасибо за ответ.
Я посмотрел тоже самое на другом тестовом сайте. Там все существенно быстрее. Сразу возник вопрос: это мой косяк или хостинг существенно слабее. Как бы оценить, где тормозит хостинг, а где я, ну, или скажем, неоптимальность настройки скрипта.
Глядя на код упомянутого выше модуля, становится страшно. куча прыжков из .module (где хуки меню) в .inc (где остальные функции) и обратно. Много условностей Друпала, в которые оборачиваются более распространенные функции jQuery. И, кстати, почему-то jQuery старой версии, хотя Друпал 7.2 совсем недавно обновился.
В связи с этим сомнения, не разумнее ли просто работать с jQuery. Выглядит как-то попроще и понагляднее, или я опять чего-то не понимаю. Прокомментируйте, плиз.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 23 июня 2011 в 20:32

"kwas" wrote:
Сразу возник вопрос: это мой косяк или хостинг существенно слабее.

firebug позволяет посмотреть все что бегает туда сюда по сети и время этого.

"kwas" wrote:
В связи с этим сомнения, не разумнее ли просто работать с jQuery. Выглядит как-то попроще и понагляднее, или я опять чего-то не понимаю. Прокомментируйте, плиз.

не разумнее. не для всех задач.

Аватар пользователя kwas kwas 23 июня 2011 в 20:49

"Ильич Рамирес Санчес" wrote:
firebug позволяет посмотреть все что бегает туда сюда по сети и время этого.

да, время...
вот, например, при выборе из списка на формочке какого-то пункта возникает POST запрос (9 сек.)
Есть к нему расшифровка: DNS-запрос=0, Подключение=0, отправка=0, ожидание=9сек, получение=0.
Как-бы, да, показывает, но что мне это может дат с точки зрения пищи для размышления. Все время, что запрос выполняется, браузер не при делах, он просто ждет (не стреляйте в пианиста, он играет, как умеет). Мне как-то дико, чем можно заниматься 9 секунд! файлики с функциями никакие по размеру. Хостер уверяет, что у него современные скази диски, процы там расфуфыренные и памяти до чёрта. Но 9 сек! - это же просто пи@дец, извиняюсь за выражение. А иногда и по 15 тоже самое происходит.
И колесико это синенькое, имитирующее циферблат - бесит. Оно весь дизайн убивать будет. Кто его выбрасывает на экран? Друпал? заменить бы чем-нить в слое с абсолютным позиционированием