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

StackOverflow https://stackoverflow.com/questions/4511721

Вопрос

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

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

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

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

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

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

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

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

Редактировать] Не добился большого прогресса в этом, поэтому я открою это до награды.

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

Это было полезно?

Решение

Аякс блоки.

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

http://drupal.org/project/ajaxblocks

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

Другие советы

Вы смотрели на Модуль Authenticated User Cacaching (Authcache)? Это работает так же, как вы описываете в варианте 1 выше.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top