PHP - Memcache - HTML-кеширование

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

У меня есть несколько примеров:

1-) У меня динамическая страница PHP, которая обновляется каждый час. Содержание страницы одинаково для каждого пользователя. Так что в этом случае я могу либо:

а) создать страницу HTML, и эта страница может генерироваться каждый час. В этом случае я бы хотел обойти PHP, поэтому должна быть статическая страница, и если база данных обновится, будет создан новый файл HTML. Как я могу это сделать? Я могу создать скрипт crontab, который генерирует HTML-файл, но он не выглядит элегантным способом.

б) кэшировать вывод в памяти, чтобы веб-сервер обновлял контент каждый час. Я думаю, мне нужен модуль кеш-памяти для веб-сервера. Существует неофициальный модуль memcache для lighttpd, но он не выглядит стабильным, я также слышал модуль memcache для nginx, но не знаю, возможно ли это или нет. Этот способ кажется более элегантным и возможным, но как? Есть идеи? (Опять же, я хотел бы обойти PHP в этом случае)

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

Опять же, как я могу создать систему кеширования для этой страницы? Я думаю, что если я смогу найти решение для первого примера, тогда я смогу использовать AJAX в этой части с тем же решением. Я прав?

редактировать: я думаю, я не мог объяснить. Я хотел бы полностью обойти PHP. PHP-скрипт будет запускаться один раз в час, после чего PHP-вызов не будет выполняться. Я хотел бы снять его накладные расходы.

Заранее спасибо,

3 ответа

Решение

Перейти со статическим HTML. Каждый час просто обновляйте статический HTML-файл с выходными данными. Вы захотите использовать ежечасный cron для запуска PHP-скрипта для fopen() и fwrite() к файлу. Нет необходимости нажимать на PHP, чтобы получить страницу вообще. Просто создайте правило перенаправления.htaccess mod_rewrite для этой конкретной страницы, чтобы сохранить текущее наименование URL.

Хотя не очень элегантный, статический HTML со сжатием gzip для меня более эффективен и будет использовать меньше пропускной способности

Пример использования cron для запуска PHP-скрипта каждый час:

// run this command in your console to open the editor
crontab -e

Введите эти значения:

01 * * * * php -f /path/to/staticHtmlCreater.php > /dev/null

Последняя часть гарантирует, что у вас не будет никакого вывода. Этот cron будет запускаться в первую минуту каждого часа.

ОБНОВИТЬ

Либо я пропустил раздел с информацией о вашем динамическом профиле пользователя, либо он был добавлен после моего первоначального комментария. Если вы используете только один сервер, я бы посоветовал вам переключиться на APC, который обеспечивает как кэширование кода операции, так и механизм кэширования быстрее, чем memcached (для приложения с одним сервером). Если данные профиля пользователя находятся ниже сгиба (под видом окна пользователя), вы можете подождать, чтобы сделать запрос AJAX, пока пользователь не прокрутит вниз до указанной точки. Вы можете увидеть эту функцию на странице состояния Facebook.

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

Изменить: я забыл упомянуть, что APC (пока) не поставляется с PHP, но может быть установлен из PECL. Он будет отправлен как часть PHP 6.

Хороший способ сделать это - сохранить статический контент в файле. Все должно работать так:

  • ваш PHP скрипт называется
  • если ваш файл содержимого был изменен более 1 часа назад (ширина filemtime($yourFile))
    • заново сгенерировать контент + сохранить его в файле + отправить обратно клиенту
  • еще
    • отправить содержимое файла как есть (с файлом ($ yourFile) или echo file_get_contents($yourFile)

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

Другие вопросы по тегам