Изучение кэширования в ASP.NET - Кэширование фрагмента страницы

ОГЛАВЛЕНИЕ

Кэширование фрагмента страницы

ASP.NET предоставляет механизм для кэширования частей страниц, именуемый кэшированием фрагмента страницы. Для кэширования части страницы сначала необходимо инкапсулировать часть страницы, которую надо кэшировать, в пользовательский управляющий элемент. В исходный файл пользовательского управляющего элемента добавляется директива OutputCache, задающая атрибуты Duration и VaryByParam. Когда этот пользовательский управляющий элемент загружается в страницу при выполнении, он кэшируется, и все последующие страницы, ссылающиеся на тот же пользовательский управляющий элемент, будут извлекать его из кэша.

 

Рис. 10: Кэширование фрагмента

Следующий пример показывает подробности кэширования фрагмента:

Пример

<!— UserControl.ascx —>

<%@ OutputCache Duration='60'
                VaryByParam='none' %>
<%@ Control Language="'C#'" %>

<script runat="server">
  protected void Page_Load(Object src, EventArgs e)
  {
     _date.Text = "User control generated at " +
                   DateTime.Now.ToString();
  }
</script>
<asp:Label id='_date' runat="'server'" />

Здесь имеется кэширование пользователя на пользовательском управляющем элементе, поэтому при его использовании на странице часть страницы будет кэшироваться.

Кэширование данных

Кэширование данных может резко повысить производительность приложения путем уменьшения соперничества за базу данных и передачи данных туда-обратно. Кэширование данных хранит требуемые данные в кэше, так что веб-сервер не будет отправлять запросы серверу баз данных всегда для абсолютно всех запросов, что повышает производительность веб-сайта. Для кэширования данных необходимо кэшировать данные, которые доступны всем или очень распространены. Кэширование данных является полноценным механизмом кэширования, позволяющим хранить и извлекать данные между несколькими запросами HTTP и несколькими сессиями внутри одного и того же приложения.

 

Рис. 11: Кэширование данных

Изображение выше показывает, как обращаться к данным прямо из сервера баз данных и как данные извлекаются с помощью кэша. Кэширование данных относится не только к серверу SQL, можно хранить в других источниках данных, как показано на рис 1.4.

Далее показана реализация кэширования данных в веб-приложении. Данные или объекты добавляются в кэш тремя способами. Но, исходя из ситуации, придется обращаться к ним по-разному. Эти методы - Cache[],Cache.add(), cache.insert(). Следующая таблица показывает явное различие этих методов.

 

хранит данные в кэше

поддерживает зависимость

поддерживает истечение

поддерживает настройки приоритета

возвращает объект

cache[]

да

нет

нет

нет

нет

cache.insert()

да

да

да

да

нет

cache.add()

да

да

да

да

да

cache[] является простым в использовании свойством, но cache.insert() и cache.add() дают больше контроля над кэшированными данными.

Далее рассмотрены особенности методов Cache.Insert() и Cache.Add(). Cache.Insert() имеет четыре перегрузки, тогда как Cache.Add() не имеет перегруженных методов. Следующая таблица показывает чаще всего используемые свойства для этих методов.

Свойство

Тип

Описание

Key

String

Уникальный ключ, идентифицирующий эту запись в кэше.

Dependency

CacheDependency

Зависимость, которуюимеетэтазаписькэшанафайл, каталогилинадругуюзаписькэшапри ее изменении эта запись удаляется.

Expires

DateTime

Фиксированные дата и время, после которых эта запись кэша удаляется.

Sliding Expiration

TimeSpan

Время между тем, когда к объекту последний раз обращались и когда объект должен быть удален из кэша.

Priority

CacheItemPriority

Наскольковажнодержатьэтотэлементвкэшепосравнениюсостальнымизаписямикэша(используется при решении,как удалять объекты кэшаприуборке мусора).

OnRemoveCallback

CacheItem RemovedCallback

Делегат, регистрируемый в записи кэша для вызова при удалении.

Первые два обязательны для методов Cache.Insert(), тогда как остальные меняются в зависимости от ситуации.