Кэширование сайта Drupal с данными о сеансе на каждой странице - PullRequest
3 голосов
/ 22 декабря 2010

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

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

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

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

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

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

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

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

[EDIT] HavenЯ не добился большого прогресса в этом, поэтому я открою его за вознаграждение.

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

Ответы [ 5 ]

3 голосов
/ 22 декабря 2010

Вы смотрели на модуль кэширования аутентифицированных страниц пользователя (Authcache) ?Он работает аналогично тому, что вы описали в варианте 1 выше.

2 голосов
/ 07 января 2011

Ajax Blocks.

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

http://drupal.org/project/ajaxblocks

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

1 голос
/ 07 января 2011

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

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

0 голосов
/ 06 февраля 2011

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

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

0 голосов
/ 06 января 2011

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

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

...