» ASP
для новичков
» Главная
страница
»
ASP
для новичков
Правила
кэширования Web-страниц
В предыдущем разделе мы
рассмотрели основные ситуации, связанные с кэшированием Web-страниц. Как и
всегда, разработчик должен найти компромисс между скоростью загрузки страниц и
их динамическим обновлением. Если содержимое Web-страницы динамически
обновляется, то, естественно, ни о каком кэшировании речь идти не может. Но
подобный жесткий режим обновления содержимого Web-страниц все же будет создавать
достаточно интенсивный трафик между браузером удаленного пользователя и
WWW-сервером. Поэтому при разработке архитектуры Web-сайта следует по
возможности достаточно четко разделить статические и динамические элементы по
разным Web-страницам, чтобы статическое наполнение сайта могло быть кэшировано.
Но вернемся к установке
правил кэширования Web-страниц. В ASP.NET в состав объекта HttpResponse был
введен еще один дополнительный объект с наименованием Cache. Он реализуется при
помощи класса HttpCachePoiicy. И этот объект предоставляет
разработчику поистине беспрецедентный объем возможностей. Рассмотрим методы и
свойства данного класса.
- AppendCacheExtension. Метод
устанавливает значение для заголовка HTTP Cache-Control. В качестве параметра
методу передается значение типа string, которое и будет содержимым искомого
заголовка HTTP. Необходимо упомянуть, что полностью все возможности, связанные с
данным заголовком HTTP, реализованы только в браузере Internet Explorer
последних версий. Другие браузеры просто проигнорируют данный заголовок, если в
нем будут встречаться неизвестные параметры. Полностью возможные параметры для
этого заголовка HTTP описаны в документе RFC 2616. Однако здесь мы приведем два
наиболее часто используемых параметра. Один из них носит наименование pre-check.
Значением данного параметра является целое число, указывающее продолжительность
временного промежутка в секундах. Данный параметр указывает время, в течение
которого разработчик или приложение не планируют изменять Web-страницу. Но при
этом нельзя сказать точно, что она не будет изменена. Это просто планирование.
Второй параметр обычно используется в паре с первым и носит наименование
post-check. Его значением также является целое число, указывающее
продолжительность временного промежутка в секундах. В течение этого промежутка
времени браузер по запросу пользователя отображает Web-страницу из локального
кэша, но при этом в фоновом режиме проверяет исходную версию Web-страницы,
находящуюся на WWW-сервере, таким образом уменьшая риск предоставления
неадекватной информации в будущем.
- SetCacheability. Метод
устанавливает правила кэширования Web-страницы в сети, т. е. область действия
этого метода распространяется и на прокси-серверы. В качестве параметра данному
методу передается значение типа HttpCacheabiiity. Данный тип является
перечислимым, и в его состав входят следующие константы:
- NoCache. Значение
указывает, что данная Web-страница вообще не подлежит кэшированию, и браузер
пользователя всегда должен запрашивать Web-страницу с сервера;
- Private. Значение
используется по умолчанию. Указывает, что Web-страница может кэшироваться
браузером удаленного пользователя, но прокси-серверы не должны хранить ее копию
в своем кэше;
- Public. Значение указывает,
что Web-страница может кэшироваться как браузером, так и прокси-серверами;
- Server. Указывает, что
кэшировать Web-страницу будет сам WWW-сервер. С точки зрения конечного
получателя Web-страницы, нет никакой разницы между вариантами NoCache и Server,
так как и в том, и в другом случае ни браузер, ни прокси-сервер не имеют права
кэшировать Web-страницу, однако с точки зрения разработчика разница все-таки
достаточно существенная. В конце концов, именно разработчику придется думать,
как осуществлять кэширование Web-страниц на своем сервере.
- SetExpires. Метод позволяет
устанавливать точную дату и время, до наступления которых Web-страница не будет
изменена, и браузер может использовать ее локальную версию, сохраненную в
собственном кэше или кэше прокси-сервера. В качестве параметра методу передается
значение типа DateTime.
- setLastModified. Метод
позволяет указывать для Web-страницы дату и время ее последнего изменения. При
этом, по сути, устанавливается значение заголовка HTTP с наименованием
Last-Modified. В качестве параметра методу передается значение типа DateTime.
- SetLastModifiedFromFileDependencies. Данный метод, подобно предыдущему,
устанавливает значение заголовка HTTP с наименованием Last-Modified. Но при этом
разработчик не должен передавать устанавливаемое значение в качестве параметра.
Метод сам получает его на основе атрибутов файла.
- setNoServerCaching. Метод
запрещает серверу производить кэширование искомой Web-страницы в своем кэше. То
есть, при выполнении данного метода все запросы к Web-странице должны
выполняться в полном объеме, а заранее сохраненная в кэше WWW-сервера копия
страницы пользователю предоставляться не будет.
Помимо рассмотренного нами
объекта, существует и еще один способ кэширования страниц ASP.NET. Он основан на
использовании директивы Outputcache. Для того чтобы установить период годности
данной Web-страницы равный одной минуте, мы должны в ее HTML-код включить
следующую директиву:
<%@ OutputCache
Duration="60" VaryByParam="None" %>
Однако необходимо понимать,
что существует несколько доводов против использования подобного механизма
регулирования кэширования Web-страниц. Во-первых, возможности данной директивы
все-таки достаточно ограничены. Встроенный объект HttpCachePoiicy перекрывает их
по всем параметрам. Во-вторых, следует осознавать, что ASP.NET все-таки является
стройной системой, которая отходит от традиций языков сценариев, к которым,
несомненно, относились предыдущие версии ASP, и приближается к системам класса
RAD (Rapid Application Development). Следовательно, необходимо соблюдать
основные принципы построения приложений и пользоваться все-таки встроенными
классами, а не вставлять куски кода вручную в тело разрабатываемой Web-страницы.
Итак, резюмируем. В данном
разделе мы рассмотрели основные возможности кэширования Web-страниц при помощи
встроенного объекта HttpCachePoiicy и директивы output cache. Каждый
разработчик волен сам выбирать, какой именно вариант ему подходит больше.
Следующий
урок
|