Кэширование с классом HttpCachePolicy

Использование директивы OutputCache — наиболее предпочтительный способ кэширования страницы, потому что он отделяет инструкции кэширования от остальной части кода. Директива OutputCache также облегчает конфигурирование некоторых дополнительных свойств в одной строке.

Однако есть и другой выбор: можно написать код, использующий специальное встроенное средство Response.Cache, которое представляет экземпляр класса System.Web.HttpCachePolicy. Этот объект включает в себя свойства, позволяющие включать кэширование для текущей страницы.

В следующем примере страница данных была переписана так, чтобы автоматически разрешать кэширование при ее первой загрузке. Этот код включает кэширование методом SetCacheability(), который специфицирует, что страница будет кэширована на сервере, и что любой другой клиент сможет использовать ее кэщированную копию. Метод SetExpires() определяет время удержания копии страницы в кэше, которое установлено, начиная с текущего момента, плюс 60 секунд.

protected void Page_Load (Object sender, EventArgs e)
{
  // Кэшировать эту страницу на сервере.
  Response.Cache.SetCacheability(HttpCacheabilitу.Public);
  // Использовать кэшированную копию этой страницы в течение 60 секунд.
  Response.Cache.SetExpires(DateTime.Now.AddSeconds(6O));
  // Эта дополнительная строка гарантирует, что броузер не может
  // пометить страницу как недействительную, когда пользователь
  // щелкнет на кнопке Refresh
  // (что пытаются сделать некоторые "шаловливые" браузеры).
  Response.Cache.SetValidUntilExpires(true);
  lblDate.Text = "The time is now:<br />" + DateTime.Now.ToString();
}

Прагматичное кэширование не так ясно с точки зрения дизайна. Встраивание кэширующего кода непосредственно в страницу часто выглядит неуклюже, и всегда будет некрасиво, если вы хотите, включить другой инициализирующий код в свою страницу. Помните, что код обработчика события Page.Load выполняется только в том случае, если страница не находится в кэше (либо потому, что это — первый запрос к ней, поскольку предыдущая кэшированная версия устарела и была удалена либо потому, что параметры запроса не совпадают с теми, что были переданы во время предыдущего запроса).

Совет. Убедитесь, что вы используете свойство Response.Cache, а не Cache. Свойство Cache не применяется для кэширования вывода. Оно предоставляет доступ к кэшу данных (обсуждается в разделе "Кэширование данных").

предыдущая    следующая страница    вначало главы    оглавление

489

Hosted by uCoz