Использование директивы 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