Как организовать кэширование страниц сайта
Для чего нужно кэширование веб страниц
Кэширование – эффективный способ оптимизации скорости работы сайтов. Практически все современные веб-сайты имеют динамические страницы. При каждом посещении такой страницы сервер генерирует ее заново. В большинстве случаев, если контент страниц не обновляется постоянно, это нецелесообразная трата ресурсов.
Для сайтов с минималистичным дизайном и невысокой посещаемостью перегенерация страниц сервером не составляет проблемы. Но на популярных сайтах с большой посещаемостью нагрузка на сервер становится ощутимой, и может превысить его ресурсы, которые не безграничны. Большая нагрузка на сервер, интерпретатор PHP, сервер базы данных MySQL в первую очередь приводит к “забиванию” оперативной памяти и центрального процессора сервера, снижению скорости его откликов, увеличению времени загрузки страниц сайта. В лучшем случае это негативно сказывается на юзабилити и вызывает недовольство пользователей, а в худшем - зависанию процессов сервера (PHP, MySQL). В таких случаях применяется кэширование, как способ уменьшить нагрузку и оптимизировать скорость откликов сервера.
Процесс кэширования сайта
При кэшировании динамические веб-страницы, которые генерируются PHP, сохраняются в виде статических HTML-страниц либо текстовых файлов, или JSON-структур. Они хранятся на сервере в специально отведенной папке, например, /cache/ или /tmp/. Каждый раз, когда пользователь запрашивает адрес исходной страницы, ему открывается ее сохраненная статическая HTML копия. Происходит это гораздо быстрее, чем при обращении к первоисточнику (PHP скрипту), так как в этом случае одна и та же страница не генерируется каждый раз заново. При этом не запускается серверный процесс PHP.
В случае, если кеш хранится в виде текстовых файлов или json, то обязательно запускается пхп процесс, который парсит текстовую или JSON структуру для представления ее в виде HTML. На то, чтобы запустить пхп нужно потратить определенное время. А в нашем деле каждая доля секунды дорога :).
По сути, кэш – это высокоскоростной буфер обмена между пользователем сайта и сервером. Когда пользователь обращается к веб странице, то именно в кэше система ищет их в первую очередь. И только еcли не находит их там, запускаются серверные процессы, пхп-скрипты, создаются запросы к базе данных для динамической генерации страницы.
Проблемы кэширования страниц сайта
Кэширование существенно оптимизирует скорость работы сайта, снижает нагрузку на сервер, но связано с проблемой устаревания контента. Рано или поздно, контент обновляется, и закэшированная копия страницы, которая выдается на запрос пользователя, может оказаться неактуальной. Для решения этой проблемы нужно предусмотреть “сброс” кэша. Это может быть дополнительный PHP-скрипт, который будет запускаться кроном (cron — планировщик задач в UNIX-подобных операционных системах). Частоту запуска такого скрипта следует установить согласно частоте обновления контента сайта. Это может быть раз в сутки, раз в неделю. Если у вас контент обновляется раз в месяц, то, очевидно, у вашего сайта не большой трафик и смысла связываться с кэшем нет.
Пример кеширования на PHP
$data = $cache->read($cache_dir);
if($data) {
$positions = $data;
} else {
$positions = Position::getPositionsCache($where, 1, '', $order_by, $limit);
$cache->write($cache_dir, $positions);
}