Как правильно кэшировать отдельные части страницы в PHP? - PullRequest
2 голосов
/ 23 февраля 2011

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

  • Если я кеширую целую страницу, как мне сохранить статус входа / выхода пользователя на боковой панели
  • Как мне кешировать метатеги дляpage в качестве основного кэширования выполняется в середине страницы, так как это самая дорогая часть в плане обработки.

Ответы [ 4 ]

1 голос
/ 23 февраля 2011

Взгляните на модуль Cache_Lite PEAR .

0 голосов
/ 05 февраля 2012

Применение фильтров содержимого перед выводом.

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

Пример:

<p>some cached content</p>
<div id="user_box"> {{USER_BOX}} </div> 
<p>other cached content</p>

Сначала извлеките кэшированное содержимое, затем в своем коде замените {{USER_BOX}} на результат вызова функции и, наконец, выведите измененный результат.

Таким образом, вам не нужно кодировать и выполнять дополнительные запросы AJAX (чем больше сервер вызывает меньше производительности).

Конечно, вы можете обработать кешированный контент с помощью некоторого механизма шаблонов, такого как Twig (часть Symfony), если вы используете php.Это добавит некоторые дополнительные функции, такие как условия и т. Д.

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

Очевидно, что у меня нет конкретной информации о вашей настройке, но обычная тактика - просто кэшировать результат базы данных / содержимое страницы в Memcached. Если Memcached не подходит для вас, вы можете создать доступный для записи каталог на вашем сервере и просто кешировать содержимое страницы. Таким образом, вы по-прежнему будете генерировать пользовательский контент для каждого запроса, но без дополнительных затрат на необязательный запрос к базе данных.

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

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

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

...