Кэширование сайта Drupal с данными о сессиях на каждой странице

У нас есть сайт, написанный на Drupal 6.

Мы хотим использовать механизм кэширования Drupal для повышения производительности, но когда мы его включили, мы обнаружили проблемы, потому что на нашем сайте данные сеанса отображаются на каждой странице. Система кэширования в Drupal работает только для статической страницы содержимого, и наши данные сеанса фактически означают, что ни одна из наших страниц не является статической.

Мы придумали два решения для этого:

  1. Перепишите блок, который показывает данные сеанса, чтобы он загружал нестатические данные, используя Ajax, чтобы основной контент HTML был статическим. Недостатками этого является то, что это будет означать довольно большую работу, а также то, что это уменьшит функциональность для пользователей без поддержки Javascript и специализированных браузеров (т.е. программ чтения с экрана).

  2. Переместить данные сеанса в iframe или похожие. Это просто звучит неправильно, и я не хочу этого делать, но я думаю, это решит проблему.

  3. или найдите альтернативную систему кеширования, которая позволит нам кэшировать сайт таким образом, чтобы иметь дело с небольшим блоком динамических данных на каждой странице. Это наш предпочтительный вариант, но мы не смогли добиться какого-либо прогресса в поиске чего-либо, поэтому вопрос здесь.

Так что, если у кого-то есть какие-либо предложения, которые помогут нам с вариантом 3, пожалуйста, сообщите нам. Спасибо.

(PS. Я знаю, что в Drupal 7 есть улучшенная система кеширования, которая может помочь с этим, но мы еще не готовы перейти на D7)

[РЕДАКТИРОВАТЬ] Не достигли большого прогресса в этом, поэтому я открою его за вознаграждение.

Я взглянул на то, как Ubercart справляется с подобной ситуацией (поскольку это один из самых популярных модулей Drupal, и его задача в основном решать ту же проблему, что и мы). Они справляются с этим, когда в информационном блоке корзины отображается статический текст, когда пользователь не вошел в систему (т. Е. "Нажмите здесь, чтобы просмотреть корзину"), и только динамические данные корзины отображаются на каждой странице, когда пользователь вошел в систему. Мы не чувствую, что это на самом деле решает проблему; это просто уклоняется от этого, и это не то, что мы хотим. Но я обеспокоен тем, что если Ubercart прибегнет к этому, это может оказаться единственным вариантом.

5 ответов

Решение

Ajax Blocks.

Более простым решением, чем Authcache, является Ajax Blocks.

http://drupal.org/project/ajaxblocks

Работает хорошо, и, насколько я помню, довольно хорошо обрабатывает пользователей без js.

Посмотрели ли вы модуль Authenticated User Page Caching (Authcache)? Это работает аналогично тому, что вы описали в варианте 1 выше.

Другим решением было бы использовать ворота ESI для рендеринга ваших страниц в виде сборки блоков. Есть несколько проектов вокруг этого, я не эксперт, но поиск в Google может дать вам некоторые идеи.

PS: У вас будет та же проблема с D7, кеширование более или менее одинаково.

Моя проблема очень похожа В зависимости от настроек сеанса фон тела меняется. Я мог бы добавить класс к тегу body с помощью jQuery, но не знаю, будет ли эта производительность выглядеть хорошо.

Я проверю это и сообщу.

Возможно, вы захотите проверить этот модуль: http://drupal.org/project/blockcache_alter. Я не уверен, достигнет ли это того, что вы ищете, или нет, но это может помочь дать вам представление о блочном кэшировании.

Кроме того, здесь есть много отличных ресурсов для повышения производительности, которые могут привести к чему-то полезному: http://drupal.org/node/326504

Другие вопросы по тегам