==Обзор существующих решений==
Все понимают, что кеш имеет смысл только тогда, когда материал на странице (сайте) не меняется. Но для статичного сайта кеш обычно и не применяют, а вот для динамичного очень хочется, чтобы не было тормозов - и посещаемость больше, и изменений больше...
Есть модуль [http://www.drupal.org/project/Boost Boost], но он даст ускорение только для анонимных пользователей, но не для тех, кто представился системе... А ведь хочется именно для активных увеличить скорость - именно им она нужна.
Есть модуль [http://drupal.org/project/blockcache Block Cache] - он кеширует блоки. То, что нужно! Его можно настроить и он будет сохранять в кеше не всю страницу, а блоки! Но проблема в том, что и блоки меняются довольно часто. Например, "Новое на форуме" или "Сейчас на сайте"...
Таким образом выиграш не большой.
Есть ещё модуль [http://drupal.org/project/advcache Advanced cache] - он с помощью патчей расширяет функциональность кеша в ядре Друпал, но я его не проверял... Со слов автора кеширует и ноды, и комментарии и термины словарей.
И ещё модуль кеширования: [http://drupal.org/project/memcache Memcache API and Integration]. Это API для использования Memcached и библиотеки PECL Memcache в Drupal. Не пробовал.
==Что может мешать кешированию?==
*Капча. Для каждой формы (включая форму комментария) формируется новая капча. Таким образом страницы с капчей не кешируются. Остаётся вынести форму комментария на отдельную страницу, а на странице документа выдавать только ссылку, но это не всегда удобно для пользователей...
*Собственно динамический контент (блоки справа или слева, блок ссылок для ноды - разный для разных ролей)
*Комментарии. Статья может оставаться неизменной, а добавляются только комментарии. Получается, что кеш нужно обновлять каждый раз, когда добавился комментарий. Также должен обновиться и тизер - в нём есть указание общего количества комментариев и новых комментариев.
==Решение==
Пару лет назад я встретил такое решение (попробую найти ссылку...). Муж сделал для своей жены такой сервис, чтобы она могла оставлять комментарии на любой странице сайта (им нужно было по работе). Это было реализовано так: в каждую страницу вставлялся код на JS из двух строк, который вызывал скрипт на другом сервере (там собственно и хранились комментарии). Скрипт вставлял в тело страницы комментарии, оформлял их и выдавал форму для добавления новых. Удобно! Сейчас, насколько я знаю, в этот проект какая-то крупная компания вложила миллионы...
Но вот о чём я подумал: в их реализации комментарии не меняют текст страницы - он статичный, а комментарии добавляются динамически в момент просмотра страницы.
Таким образом, можно кешировать страницу с некоторыми вызовами JS-скриптов, которые соберут в браузере пользователя уникальную страницу! Лучше всего это сделать на AJAX.
Если так, то пользователи с включённым JS получат прирост производительности, а без него будет обычная работа. Это допустимо.
Проблемы с поисковиками быть не должно, если обеспечить 2 версии: с JS (AJAX) и без оного. Поисковики как и текстовые браузеры получать версию без JS.
===Что может выдаваться через AJAX?===
*Блок ссылок для ноды (документа)
*Комментарии
*Форма добавления комментария с капчей
*Динамические блоки
*и другие...
===А теперь вопрос!===
'''Если всё так хорошо, то почему никто так не сделал? Вероятно есть что-то чего я не учёл. Подскажите!'''
PS. Хотелось как-то проилюстрировать статью для наглядности. Думал сделать фото кеша, ... но фотоаппарат сломался! Извиняйте
Комментарии
> Проблемы с поисковиками быть не должно, если обеспечить 2 версии: с JS (AJAX) и без оного. Поисковики как и текстовые браузеры получать версию без JS.
Хм.. а как вы определите включен ли у браузера js до загрузки страницы?
Не все что можно сделать сделано. Например почему не сделать быстрое редактирование комментария (как в форумах ипб). Вроде не сложно. Однако ж никто не сделал)
Можно все блоки подгружать через AJAX. Тогда получится как Gmail.
Но я думаю что с поисковиками все же будут проблемы, да и с некоторыми старыми браузерами тоже, и с безопасностью.
А в целом интересно.
PS:
Modules: Javascript Utilities
А зачем для своих использовать Капчу? Может в этом кроется решение?
а вот не время ещё для повального аякса. да и не факт,что это даст прирост
Вообще-то верно - капча нужна только для анонимных пользователей. Тогда как же boost кеширует страницы для анонимов? Получается, что кеш эффективен только если форма добавления комментария вынесена на отдельную страницу, а не приводится сразу за статьёй.
А почему AJAX не даст прироста. Он будет подгружать то, что нужно в то время как пользователь читает страницу... Возможно есть подводные камни...
Как определить есть ли у браузера поддержка JS:
создаётся страница в которой есть JS и если он отрабатывает, то браузер поддерживает JS. Если поддержки нет, то пользователь должен увидеть обычную страницу и идти по обычным ссылкам (например так) и тогда будет ясно, что JS отсутствует. В общем-то это не проблема.
AJAX генерирует повышенную нагрузку на сервер.
запросы к php скриптам, которые реализуют аякс, выполняются отдельно от генерирования страницы - вполне может быть,что в рамках разных соединений с БД
Меня тут мысль посещает... филосовская... что есть еще такое понятие как кэш запросов (к б.д.) - в чем его плюс по сравнению с обработанными данными?