Кэширование данных на сайте веб-страницы ASP.NET (Razor) для повышения производительности
; автор — Том ФитцМакен (Tom FitzMacken)
В этой статье объясняется, как использовать помощник для кэширования сведений для повышения производительности на веб-сайте веб-страницы ASP.NET (Razor). Вы можете ускорить работу веб-сайта, настроив на нем хранение ( то есть кэшировать) результаты данных, которые обычно занимают значительное время, чтобы получить или обработать, и которые не меняются часто.
Из этого руководства вы узнаете, как выполнять такие задачи:
- Использование кэширования для повышения скорости реагирования веб-сайта.
Ниже приведены ASP.NET функции, представленные в этой статье:
- Помощник
WebCache
.Версии программного обеспечения, используемые в этом руководстве
- веб-страницы ASP.NET (Razor) 3
Это руководство также работает с веб-страницы ASP.NET 2.
Каждый раз, когда кто-то запрашивает страницу с вашего сайта, веб-сервер должен выполнить определенную работу, чтобы выполнить запрос. Для некоторых страниц серверу может потребоваться выполнять задачи, которые занимают (сравнительно) много времени, например извлечение данных из базы данных. Даже если эти задачи не занимают много времени в абсолютном выражении, если ваш сайт испытывает много трафика, целая серия отдельных запросов, которые приводят веб-сервер к выполнению сложной или медленной задачи, может добавить много работы. В конечном итоге это может повлиять на производительность сайта.
Одним из способов повышения производительности веб-сайта в таких обстоятельствах является кэширование данных. Если ваш сайт получает повторяющиеся запросы на одни и те же сведения, и их не нужно изменять для каждого пользователя, и это не влияет на время, вместо повторной выборки или пересчета, вы можете получить данные один раз, а затем сохранить результаты. При следующем запросе на получение этих сведений вы просто получите их из кэша.
Как правило, кэшируются сведения, которые не меняются часто. Когда вы помещаете данные в кэш, они сохраняются в памяти на веб-сервере. Вы можете указать, как долго он должен кэшироваться ( от секунд до дней). По истечении периода кэширования сведения автоматически удаляются из кэша.
Примечание
Записи в кэше могут быть удалены по другим причинам, кроме того, что срок их действия истек. Например, веб-сервер может временно работать с нехваткой памяти, и одним из способов освобождения памяти является исключение записей из кэша. Как вы увидите, даже если вы поместили информацию в кэш, необходимо проверка, чтобы убедиться, что она все еще там, когда она вам понадобится.
Представьте, что у вашего веб-сайта есть страница с текущей температурой и прогнозом погоды. Чтобы получить сведения такого типа, можно отправить запрос во внешнюю службу. Так как эта информация не сильно меняется (например, в течение двухчасового периода времени), а внешние вызовы требуют времени и пропускной способности, это хороший вариант для кэширования.
Добавление кэширования на страницу
ASP.NET включает вспомогающую WebCache
службу, которая упрощает добавление кэширования на сайт и добавление данных в кэш. В этой процедуре вы создадите страницу, которая кэширует текущее время. Это не реальный пример, так как текущее время часто меняется, и это, более того, не сложно вычислить. Однако это хороший способ проиллюстрировать кэширование в действии.
Добавьте на веб-сайт новую страницу с именем WebCache.cshtml .
Добавьте на страницу следующий код и разметку:
@{ var cacheItemKey = "CachedTime"; var cacheHit = true; var time = WebCache.Get(cacheItemKey); if (time == null) { cacheHit = false; } if (cacheHit == false) { time = @DateTime.Now; WebCache.Set(cacheItemKey, time, 1, false); } } <!DOCTYPE html> <html> <head> <title>WebCache Helper Sample</title> </head> <body> <div> @if (cacheHit) { @:Found the time data in the cache. } else { @:Did not find the time data in the cache. } </div> <div> This page was cached at @time. </div> </body> </html>
При кэшировании данных вы помещаете их в кэш, используя уникальное имя на веб-сайте. В этом случае вы будете использовать запись кэша с именем
CachedTime
. Это показаноcacheItemKey
в примере кода.Код сначала считывает запись кэша
CachedTime
. Если возвращается значение (т. е. если запись кэша не имеет значения NULL), код просто задает значение переменной времени для данных кэша.Однако если запись кэша не существует (т. е. имеет значение NULL), код задает значение времени, добавляет его в кэш и задает значение срока действия в одну минуту. Через одну минуту запись кэша удаляется. (Значение срока действия по умолчанию для элемента в кэше составляет 20 минут.) Команда
WebCache.Set(cacheItemKey, time, 1, false)
показывает, как добавить текущее значение времени в кэш и установить срок его действия в 1 минуту. Установка параметра slidingExpiration вfalse
значение означает, что срок действия не продлевается при каждом запросе. Срок действия истекает ровно через 1 минуту после первоначального добавления в кэш. Если для этого значенияtrue
задано значение 1 минута, время окончания срока действия сбрасывается при каждом запросе значения из кэша.Этот код иллюстрирует шаблон, который следует всегда использовать при кэшировании данных. Прежде чем получить что-то из кэша, всегда проверка, вернул ли
WebCache.Get
метод значение NULL. Помните, что срок действия записи кэша истек или был удален по какой-либо другой причине, поэтому в кэше никогда не гарантируется наличие любой записи.Запустите WebCache.cshtml в браузере. (Перед запуском убедитесь, что страница выбрана в рабочей области Файлы .) При первом запросе страницы данные о времени отсутствуют в кэше, и код должен добавить значение времени в кэш.
Обновите Файл WebCache.cshtml в браузере. На этот раз данные о времени будут в кэше. Обратите внимание, что время не изменилось с момента последнего просмотра страницы.
Подождите одну минуту, пока кэш будет очищен, а затем обновите страницу. На странице снова указывается, что данные о времени не были найдены в кэше, а обновленное время добавляется в кэш.