[о кешировании динамического сайта]материал подготовил: Дмитрий Турецкий 12.05.2003
В заметке «кешируем свой сайт» мы начали разговор о кешировании сайта. Но там, в основном, шла речь о статическом содержимом, а ведь не секрет, что все большее число сайтов переходят на «динамику». Поэтому сегодня мы поговорим о том, как использовать преимущества кеширования при разработке динамического сайта.
Для начала давайте попробуем определиться с тем, что подразумевается под «динамическим сайтом». Динамика, как известно, означает изменение. То есть если мы, скажем, раз в месяц заменяем какую-то html-страничку на сайте, то он, в принципе, может считаться динамическим… Но понятно, что имеется в виду нечто совсем другое, а именно ситуация, когда страница выводится каким-то скриптом. При этом, даже если содержимое этой выводимой странички не будет меняться, то сайт все равно будет называться «динамическим». Занятно, не правда ли?
С точки зрения сервера динамический сайт отличается тем, что сервер не может определить дату последней модификации документов, время их жизни и некоторые другие параметры. Соответственно, при «разговоре» веб-сервера с кеширующим прокси возникают сложности с тем, можно ли кешировать полученный документ. Так как никто (кроме веб-мастера) этого точно не знает, то сервер обычно старается сделать так, чтобы документ не кешировался — а именно выставляет всяческие страшные ограничения в HTTP-заголовках. Понятно, что это приводит нас к ситуации, когда мы не используем преимущества кеширования, а следовательно — увеличивается нагрузка на сервер, увеличиваются загрузка каналов и время получения страниц пользователем…
Но случаи «полной динамичности» сайтов — когда выдаваемая страница уникальна для каждого запроса — достаточно редки. Значительно чаще страницы повторяются, по крайней мере, в течение более или менее длительного времени (здесь мы не рассматриваем встраивание ротируемой рекламы). А раз содержимое страниц на протяжении какого-то интервала времени остается неизменным, значит, есть смысл попытаться их кешировать.
В заметке «кешируем свой сайт» говорилось, что определением параметров кеширования статичных файлов занимается веб-сервер. Поэтому, если мы не хотим мучиться с настройками скриптов, то самым простым способом обеспечения кеширования динамического сайта будет сохранение сгенерированных страниц в виде банальных html-файлов. В некоторых случаях это может оказаться очень удобным решением — например, для сайта с большим количеством статей, на котором эти статьи еще и регулярно добавляются. Сами статьи не меняются (за очень редким исключением), а навигационные страницы можно перегенерировать каждый раз при добавлении новой статьи. Одно из важных условий при использовании подобной схемы заключается в том, чтобы не генерировать весь сайт заново при каждом изменении, а заменять только те файлы, которые реально обновились — иначе сервер изменит заголовок Last-Modified для всех файлов, и посетителям придется качать их заново.
Если же этот способ вам не подходит, то придется модифицировать скрипты. Для начала присмотритесь к своему сайту и определите, какие страницы могут быть скешированы и на какое время. Отдельно определите те страницы, которые кешироваться не должны — как правило, это различные «редакторские» страницы и страницы с текущей статистикой.
Обратите внимание на следующие моменты:
Скрипты, использующие POST, в большинстве случаев не кешируются. По возможности, используйте GET: кеширующие прокси ориентируются на URL документа. POST имеет смысл использовать только тогда, когда объем данных достаточно велик. Например, в поисковых запросах GET вполне применим, а если вы проанализируете эти запросы, то наверняка обнаружите, что множество из них повторяются весьма регулярно. К счастью, переделать скрипты с POST на GET совсем не сложно.
Еще более правильным решением будет использовать для передачи данных адрес, поскольку