Поделиться через


Пошаговое руководство. Использование кэширования выходных данных для улучшения производительности веб-узла

Обновлен: Ноябрь 2007

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

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

Обычно при запросе страницы ASP.NET обозревателем ASP.NET создает экземпляр страницы, выполняет любой код на странице, выполняет запросы к базе данных (если таковые имеются), динамически собирает страницу и затем отправляет обозревателю конечные выходные данные. Кэширование выходных данных позволяет ASP.NET отправлять предварительно обработанную копию страницы вместо проведения этого процесса при каждом запроса. Кэширование уменьшает объем обработки, выполняемый веб-сервером, что повышает производительность и обеспечивает большую масштабируемость.

В этом пошаговом руководстве, в частности, рассматриваются следующие задачи:

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

  • Использование профилей кэша уровня приложения, свойство, позволяющее определить параметры кэширования выходных данных для целого приложения. Отдельные страницы можно сопоставить с профилями, содержащимися в файле Web.config. Это позволит контролировать кэширование централизованно и не редактировать каждую страницу.

  • Кэширование, основанное на отдельных параметрах, отправленных со страницей.

Обязательные компоненты

Для выполнения этого пошагового руководства потребуется:

  • Visual Web Developer (Visual Studio).

  • Microsoft .NET Framework версии 2.0.

Создание веб-узла

Если веб-узел в Visual Web Developer уже создан (см. раздел Пошаговое руководство. Создание базовой веб-страницы в Visual Web Developer), то можно использовать этот веб-узел и перейти к следующему подразделу этого пошагового руководства. В противном случае создайте новый веб-узел и страницу, выполнив следующие действия.

Создание веб-узла на базе файловой системы

  1. Откройте Visual Web Developer.

  2. В меню Файл выберите команду Создать веб-узел. (В выпуске Visual Web Developer, экспресс-выпуск в меню Файл последовательно выберите пункты Создать и Веб-узел.)

    Откроется диалоговое окно Создать веб-узел.

  3. В группе Установленные шаблоны Visual Studio выберите Веб-узел ASP.NET.

  4. В поле Расположение введите имя папки, где следует хранить страницы веб-узла.

    Например, введите имя папки C:\WebSites.

  5. В списке Язык выберите язык программирования, с которым вы предпочитаете работать.

  6. Нажмите кнопку OК.

  7. Visual Web Developer создаст папку и новую страницу с именем Default.aspx.

Настройка кэширования на уровне страницы

Эта процедура представляет собой введение в кэширование страницы. В этой процедуре необходимо добавить элемент управления Label на страницу, отображающий время создания страницы, и настроить кэширование страницы. С помощью отображения времени создания страницы можно увидеть, что запрос страницы выполнен из кэша.

Настройка кэширования на уровне страницы

  1. Откройте страницу Default.aspx или перейдите к ней (также можно использовать любую другую страницу веб-узла).

  2. Перейдите в представление конструирования.

  3. Из группы Стандартные панели элементов перетащите на страницу элемент управления Label, оставив имя по умолчанию (Label1).

  4. Дважды щелкните пустую область страницы.

    Конструктор перейдет в редактор кода и создаст метод Page_Load.

  5. Добавьте следующий выделенный код в метод.

    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs)
         Label1.Text = System.DateTime.Now.ToString()
    End Sub
    
    protected void Page_Load(Object sender, System.EventArgs e)
    {
         Label1.Text = System.DateTime.Now.ToString();
    }
    
  6. Нажмите сочетание клавиш CTRL+F5 для запуска страницы.

    При отображении страницы в обозревателе будут видны текущие дата и время. Нажмите кнопку обновления обозревателя и обратите внимание, что отметка времени меняется при каждом обновлении страницы.

  7. Закройте обозреватель.

  8. Добавьте следующую директиву @ OutputCache в начало страницы:

    <%@ OutputCache Duration="15" VaryByParam="none" %>
    

    Эта директива указывает, что страницу нужно кэшировать. Атрибут Duration определяет, что страница будет храниться в кэше 15 секунд.

  9. Нажмите сочетание клавиш CTRL+F5 для повторного запуска страницы.

  10. Обновите страницу несколько раз.

    Обратите внимание, что время создания обновляется лишь через каждые 15 секунд, вне зависимости от того, сколько раз страница была обновлена в обозревателе. Это связано с тем, что запрос получает данные из кэша до тех пор, пока не истечет время ожидания, и в этот момент снова выполняется код страницы.

Задание кэширования на уровне приложения

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

Настройка кэширования на уровне приложения

  1. Если файл Web.config уже существует, переходите к шагу 4.

  2. В обозревателе решений щелкните правой кнопкой мыши имя веб-узла и выберите пункт Добавить новый элемент.

  3. В диалоговом окне Добавить элемент выберите Файл веб-конфигурации и нажмите кнопку Добавить.

    Убедитесь, что используется имя "Web.config".

  4. Добавьте следующий XML-элемент как дочерний в элемент system.web:

    <!-- caching section group -->
    <caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="AppCache1" enabled="true" duration="60"/>
        </outputCacheProfiles>
    </outputCacheSettings>
    </caching>
    
  5. Сохраните файл и закройте его.

  6. Откройте веб-страницу, с которой выполнялась работа, или перейдите к ней и переключитесь в режим исходного кода.

  7. Измените директиву @ OutputCache для чтения следующим образом.

    <%@ OutputCache CacheProfile="AppCache1" VaryByParam="none" %>
    
  8. Нажмите сочетание клавиш CTRL+F5 для запуска страницы.

  9. Обновите страницу несколько раз.

    На этот раз дата останется такой же на протяжении времени, указанном в профиле кэша, которое составляет 60 секунд.

Кэширование с использованием параметров

Для директивы @ OutputCache требуется задать атрибут VaryByParam, который до этого момента имел значение "none". Атрибут VaryByParam позволяет настроить кэширование так, чтобы ASP.NET сохранял разные версии страницы в зависимости от таких параметров как: строки запросов, значения отправки формы, заголовки запросов и т. д.

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

В следующей процедуре показано, как изменить элемент управления Label, добавленный на страницу, чтобы он отображал время на цветном фоне. Изменить цвет можно с помощью элемента управления TextBox для ввода имени цвета.

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

Кэширование на основе параметров

  1. Откройте страницу, с которой выполнялась работа, или переключитесь на нее.

  2. Перейдите в представление конструирования.

  3. Перетащите из группы Стандартная панели элементов элемент управления TextBox на страницу и присвойте его параметру ID значение Цвет.

  4. Перетащите элемент управления Button на страницу, оставив имя по умолчанию (Button1).

  5. Присвойте свойству Text элемента управления Button значение "Изменить цвет".

    Дважды щелкните элемент управления Button для создания обработчика событий Click.

  6. Добавьте в метод следующий выделенный код:

    Protected Sub Button1_Click(ByVal sender As Object, _ 
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.BackColor = _        System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text))
    End Sub
    
    protected void Button1_Click(Object sender, System.EventArgs e)
    {
        Label1.BackColor =         System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text));
    }
    
  7. Присвойте атрибуту defaultbutton элемента form значение "Button1".

    Это приведет к вызову обработчика событий Click кнопки при нажатии клавиши ВВОД.

  8. Замените директиву @ OutputCache следующей ее версией:

    <%@ OutputCache Location="Server" Duration="60" VaryByParam="Color" %>
    
  9. Нажмите сочетание клавиш CTRL+F5 для запуска страницы.

  10. Введите в текстовом поле имя цвета, например, "red" или "blue", и нажмите кнопку Изменить цвет.

    ASP.NET выполнит кэширование версии страницы, использующей указанный цвет.

  11. Обновите страницу несколько раз.

    Если новое имя цвета не будет введено, то дата и время не изменятся по крайней мере в течение одной минуты, как задано атрибутом Duration директивы @ OutputCache.

  12. Введите новый цвет, например "green" или "orchid" и отправьте страницу.

    На этот раз обновится время и отобразится новый цвет.

Следующие действия

В данном пошаговом руководстве были показаны основные понятия кэширования страниц ASP.NET. Может также возникнуть необходимость изучить дополнительные методики кэширования:

  • Вместо использования объявлений страницы задавать кэширование программным способом. Например, в методе Page_Load можно получить доступ к классу HttpCachePolicy (используя Page.Response.Cache) и задать требуемые значения и поведение.

  • Кэшировать страницы с привязкой к данным так, чтобы они создавались в кэше заново только при изменении данных, от которых они зависят. Дополнительные сведения см. в разделе Пошаговое руководство. Использование кэширования выходных данных ASP.NET с SQL Server.

См. также

Задачи

Пошаговое руководство. Использование кэширования выходных данных ASP.NET с SQL Server

Основные понятия

Общие сведения о кэшировании в ASP.NET

Ссылки

@ OutputCache

HttpCachePolicy

VaryByParams