Как реализовать кеш HTML для сайта PHP?
Каков наилучший способ реализации кэша для PHP-сайта? Очевидно, есть некоторые вещи, которые нельзя кэшировать (например, поисковые запросы), но я хочу найти хорошее решение, которое позволит избежать "эффекта digg".
Я знаю, что WP-Cache для WordPress, но я пишу специальное решение, которое не построено на WP. Я заинтересован в том, чтобы писать собственный кеш (если он достаточно прост), или вы могли бы указать мне хорошую, легкую структуру. Я не знаю много Apache, хотя, если бы это была PHP-инфраструктура, тогда было бы лучше.
Спасибо.
Ответы
Ответ 1
Если прокси-кеш не может быть и что вы используете полные HTML файлы, вы получите максимальную производительность, минуя PHP. Изучите, как работает WP Super Cache.
Неэкранированные страницы копируются в папку кэша с аналогичной структурой URL-адреса, как ваш сайт. В последующих запросах mod_rewrite отмечает существование кэшированного файла и служит вместо него. другие директивы RewriteCond используются, чтобы гарантировать, что комментаторы/зарегистрированные пользователи просматривают прямые запросы PHP, но большинство посетителей будут обслуживаться Apache напрямую.
Ответ 2
Вы можете использовать буферизацию вывода, чтобы выборочно сохранять части вашего вывода (те, которые вы хотите кэшировать), и отображать их следующему пользователю, если это не было достаточно долго. Таким образом, вы по-прежнему показываете другие части страницы "на лету" (например, настраиваемые поля, личная информация).
Ответ 3
Лучше всего использовать кеш-прокси (Squid, Varnish) и использовать соответствующие заголовки Cache-Control/Expires вместе с ETags: см. Mark Учебное пособие по кэшированию Nottingham для полного описания того, как работают кеши и как вы можете получить максимальную производительность от кэширующего прокси.
Также проверьте memcached и попробуйте кэшировать ваши запросы к базе данных (или, еще лучше, предварительно отрисованные фрагменты страницы).
Ответ 4
Я бы порекомендовал Memcached или APC. Оба являются решениями кэширования в памяти с простыми API-интерфейсами и множеством библиотек.
Проблема с этими 2 заключается в том, что вам необходимо установить их на свой веб-сервер или на другой сервер, если это Memcached.
APC
Плюсы:
- Простой
- Fast
- Ускоряет выполнение PHP
Cons
- Не работает для распределенных систем, каждый компьютер локально хранит свой кеш
Memcached
Плюсы:
Я бы не рекомендовал писать свои собственные, там много. Вы можете пойти с дисковым кэшем, если вы не можете установить программное обеспечение на свой веб-сервер, но есть проблемы с расследованием. Один запрос может быть записан в файл, пока другой читает.
Фактически вы можете кэшировать поисковые запросы, даже на несколько секунд до минуты. Если ваш db обновляется более чем несколько раз в секунду, некоторые задержки будут в порядке.
Ответ 5
Механизм шаблона PHP Smarty (http://www.smarty.net) включает довольно продвинутую систему кэширования.
Подробности можно найти в разделе кэширования руководства Smarty: http://www.smarty.net/manual/en/caching.php
Ответ 6
Кажется, вы ищете фреймворк PHP-кеша.
Я рекомендую вам систему шаблонов TinyButStrong, которая поставляется с очень хорошим плагином CacheSystem.
Это простой, легкий, настраиваемый (вы можете кэшировать любую часть html файла, который вы хотите), очень мощный ^^
Ответ 7
Простое кеширование страниц или частей страниц - класс Pear:: CacheLite. Я также использую APC и memcache для разных вещей, но другие ответы, которые я видел до сих пор, более подходят для более полных и сложных систем. Если вам просто нужно сэкономить немного усилий на перестройке части страницы - Cache_lite с файловым хранилищем вполне достаточен и очень прост в реализации.
Ответ 8
Project Gazelle (торрент-сайт с открытым исходным кодом) предоставляет пошаговое руководство по настройке Memcached на сайте, которое вы можете легко использовать на любом другом веб-сайте, который вы можете захотеть настроить и который будет обрабатывать большой трафик.
Возьмите источник и прочитайте документацию.