Как реализовать кеш HTML для сайта PHP? - PullRequest
12 голосов
/ 11 сентября 2008

Каков наилучший способ реализации кэша для сайта PHP? Очевидно, есть некоторые вещи, которые не должны кэшироваться (например, поисковые запросы), но я хочу найти хорошее решение, которое поможет избежать «эффекта digg».

Я знаю, что есть WP-Cache для WordPress, но я пишу собственное решение, которое не построено на WP. Я заинтересован либо в написании собственного кэша (если он достаточно прост), либо вы можете указать мне на хороший, легкий фреймворк. Я не очень хорошо знаю Apache, поэтому, если бы это был PHP-фреймворк, он бы лучше подходил.

Спасибо.

Ответы [ 8 ]

16 голосов
/ 11 сентября 2008

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

7 голосов
/ 15 сентября 2008

Если прокси-кеш исключен и вы обслуживаете полные HTML-файлы, вы получите лучшую производительность, вообще обойдя PHP. Узнайте, как работает WP Super Cache .

Некэшированные страницы копируются в папку кэша с такой же структурой URL, как и у вашего сайта. При последующих запросах mod_rewrite отмечает наличие кэшированного файла и обслуживает его. другие директивы RewriteCond используются для того, чтобы пользователи, вошедшие в систему / зарегистрированные пользователи, могли видеть живые запросы PHP, но большинство посетителей будут обслуживаться Apache напрямую.

7 голосов
/ 11 сентября 2008

Лучший способ - это использовать прокси-кеш (Squid, Varnish) и обслуживать соответствующие заголовки Cache-Control / Expires вместе с ETags: см. Mark Cure Tutorial Ноттингема для полного описания того, как как работают кэши и как вы можете получить максимальную производительность от прокси кэширования.

Также проверьте memcached и попробуйте кэшировать ваши запросы к базе данных (или, что еще лучше, предварительно обработанные фрагменты страницы) там.

4 голосов
/ 12 сентября 2008

Я бы порекомендовал Memcached или APC . Оба являются решениями для кеширования в памяти с простейшими API и множеством библиотек.

Проблема с этими двумя в том, что вам нужно установить их на ваш веб-сервер или другой сервер, если он Memcached.

APC

Плюсы:
  • Simple
  • Fast
  • Ускоряет выполнение PHP также
Cons
  • Не работает для распределенных систем, каждая машина хранит свой кэш локально

Memcached

Плюсы:
  • Fast (МОГ)
  • Может быть установлен на отдельный сервер для использования всеми веб-серверами
  • Проверено, разработано в Живом Журнале
  • Используется всеми большими парнями (Facebook, Yahoo, Mozilla)

    Минусы:
  • Медленнее, чем APC

  • Возможная задержка в сети
  • Чуть больше конфигурации

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

На самом деле вы можете кэшировать поисковые запросы, даже от нескольких секунд до минуты. Если ваша база данных не обновляется чаще, чем несколько раз в секунду, некоторая задержка будет в порядке.

2 голосов
/ 11 сентября 2008

Механизм шаблонов PHP Smarty (http://www.smarty.net) включает в себя довольно продвинутую систему кэширования.

Подробности можно найти в разделе кеширования руководства Smarty: http://www.smarty.net/manual/en/caching.php

1 голос
/ 13 сентября 2008

Простое кэширование страниц или частей страниц - класс Pear :: CacheLite. Я также использую APC и memcache для разных вещей, но другие ответы, которые я видел до сих пор, касаются более полных и сложных систем. Если вам просто нужно немного сэкономить, перестраивая часть страницы - Cache_lite с хранилищем с файловой поддержкой вполне достаточно и очень просто реализовать.

1 голос
/ 11 сентября 2008

Вы, похоже, ищете фреймворк PHP-кеша. Я рекомендую вам систему шаблонов TinyButStrong, которая поставляется с очень хорошим плагином CacheSystem. Это простой, легкий, настраиваемый (вы можете кэшировать любую часть html-файла, которую вы хотите), очень мощный

0 голосов
/ 13 сентября 2008

Project Gazelle (торрент-сайт с открытым исходным кодом) предоставляет пошаговое руководство по настройке Memcached на сайте, которое вы можете легко использовать на любом другом веб-сайте, который вы можете настроить, который будет обрабатывать много трафика.

Хватайте источник и читайте документацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...