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

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

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

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

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

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

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

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

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

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

Перейдите со статическим HTML. Каждый час просто обновляйте статический файл HTML с помощью вашего вывода. Вы захотите использовать часовой процессор для запуска 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.

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

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

Хороший способ сделать это – сохранить статический контент в файле. Все должно работать следующим образом:

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

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