Кэширования вывода IIS 7.0

Введение

Веб-контент можно разделить на две категории: статический и динамический. Статический контент не меняется от запроса к запросу. Контент, который возвращается на веб – браузер, всегда один и тот же. Примеры статического контента включают в себя файлы HTML, JPG или GIF.

Другие файлы имеют динамический контент. Это ответ, который создаётся для изменений динамического контента при каждом запросе. В качестве примера может служить контент ASP.NET или PHP.

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

Функция кэширования вывода IIS7.0 направлена на полу-динамический контент. Это позволяет кэшировать статические ответы на динамические запросы и получать огромную масштабируемость.

Предварительные условия

Для данного анализа программы необходимо наличие IIS 7.0 на Windows® Vista SP1 или на Windows Server® 2008 Beta 3 или более поздней версии. В данном анализе также используется среда разработки ASP.NET 2.0, которая должна быть инсталлирована в качестве дополнительного компонента в настройке IIS 7.0.

Краткий аналитический обзор

В следующем анализе программы используем интерфейсы расширяемости IIS 7.0 для добавления специфических для языка сообщений авторского права на JPG файлы.

Сначала сделаем это путём добавления управляемого обработчика. Динамически вставка сообщения об авторских правах в каждый файл JPG идёт вместе со значением, поскольку в настоящее время управляемый код должен выполняться для каждого файла JPG.

Далее, инсталлируем WCAT, инструмент анализа возможностей инфраструктуры веб-узла IIS 7.0, для измерения пропускной способности обработчика авторских прав JPG.

Затем добавляем Output Caching (кэширование вывода) для возврата снижения производительности путём добавления обработчика авторских прав.

Часть I – Написание и настройка обработчика авторских прав

1. Создайте каталог с именем 'pictures' ('фотографии') в каталоге %systemroot%\inetpub\wwwroot. Выполните следующую команду в оболочке с повышенными правами доступа:

md%systemdrive%\inetpub\wwwroot\pictures    

2. Скопируйте цифровые фотографии – данный анализ предполагает, что ими будут JPG файлы – в новый каталог фотографий. Используйте следующую фотографию, если нет в наличии файлов JPG под рукой: http://wallpaper.iis7.org/gallery/iis7-highlight.jpg

Примечание: Из-за высокого уровня настройки безопасности Internet Explorer в Windows Server 2008, может появиться диалоговое окно безопасности, сообщающее о блокировке веб-сайта.  Для загрузки обоев IIS7.0 добавьте wallpaper.iis7.org в список надёжных сайтов.

3. Создайте приложение с помощью инструмента командной строки appcmd

%windir%\system32\inetsrv\appcmd add app -site.name:"Default Web Site"

    -path:/pictures -physicalPath:%systemdrive%\inetpub\wwwroot\pictures

4. Создайте каталог App_Code под каталогом фотографий:

md%systemdrive%\inetpub\wwwroot\pictures\App_Code

5. Откройте блокнот и вставьте в него следующий код.

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
         
namespace IIS7Demos
{
    public class imageCopyrightHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string message = "Copyright © IIS 7.0 Team";
            try            {
                string languageHeader;
         languageHeader = context.Request.Headers["Accept-Language"].Substring(0,2).ToUpper();
                switch (languageHeader)
                {
                    case ("DE"):
                        message = "IIS 7.0 Team - Alle Rechte vorbehalten";
                        break;
                    case ("ES"):
                        message = "Marca Registrada IIS 7.0 Team";
                        break;
                    default:
                        break;
                }
            }
            catch
           {
                // if something fails, e.g. no Language-Accept header, we go with the english message
           }
            InsertCopyrightMessage (   context,
                            message,
                            "yellow"                           
                        );
        }
        void InsertCopyrightMessage(
                            HttpContext context,
                            string message,
                            string color
                         )
        {
            try
            {
                // get physical path of request
                string strPath = context.Request.PhysicalPath;
                // load as bitmap
                Bitmap jpgFile = new Bitmap(strPath);
                // add copyright message
                Graphics g = Graphics.FromImage(jpgFile);
                Font f = new Font("Arial", 20, GraphicsUnit.Pixel);
                SolidBrush sb = new SolidBrush(Color.FromName(color));
                // write copyright message to bitmap
                g.DrawString(   message,
                                f,
                                sb,
                                5,
                                jpgFile.Height - f.Height - 5
                            );
                f.Dispose();
                g.Dispose();

                // save it to response stream
                jpgFile.Save(   context.Response.OutputStream,
                                System.Drawing.Imaging.ImageFormat.Jpeg
                            );
                jpgFile.Dispose();
            }
            catch (Exception e)
            {
                context.Response.Write(e.Message);
            }
        }
         
        public bool IsReusable
        {
            get { return true; }
        }
    }
}

Сохраните файл как %systemdrive%\inetpub\wwwroot\pictures\App_Code\imageCopyrightHandler.cs

6. Создайте обработчик, который выполняет этот код при запросе файла JPG:

%windir%\system32\inetsrv\appcmd set config /section:system.web.Server/handlers

    /+[name='imageCopyrightHandler-Integrated',path='*.jpg',

    verb='GET,HEAD',type='IIS7Demos.imageCopyrightHandler',preCondition='integratedMode']

7. Необходимо также включить просмотр каталога, так как ещё нет документа по умолчанию:

%windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures"

    -section:directoryBrowse -enabled:true

8. Пролистайте приложение фотографий, набрав в адресной строке Internet Explorer: https://localhost/picures. Нажмите на ссылку к вашему файлу JPG в листинге каталога IIS 7.0. Должно появиться изображение JPG со вставленным сообщением об авторских правах.

9. Посмотрите на код. Видно, что Copyright Message (сообщение об авторском праве) зависит от заголовка "Accept-Language" ("Принять-язык"), который послан браузером. При наличии инсталлированной немецкой версии Microsoft Server 2008  появится сообщение об авторских правах "IIS 7.0 Team - Alle Rechte vorbehalten", при наличии версии на испанском языке появится сообщение "Marca Registrada IIS 7.0 Team". Во всех остальных случаях сообщение об авторских правах будет "Copyright © IIS 7.0 Team". Способ проверки этого кода для изменения заголовка "Accept-Language" Internet Explorer отправляет к следующим действиям:

  • Откройте "Internet Explorer".>
  • Откройте меню"Tools" ("Инструменты") и нажмите на"Internet Options" ("Опции Internet") .
  • Нажмите на кнопку"Languages" ("Языки").
  • Нажмите на кнопку "Add…" ("Добавить…") и добавьте "es" для испанского языка или "de" для немецкого.
  • Передвиньте новый язык на верхнюю позицию списка через кнопку "Move Up" ("Переместить на верхнюю позицию").
  • Пройдите по ссылке https://localhost/pictures/%3cyour_jpg_file%3e.jpg. Сообщение об авторских правах изменится на язык, который был настроен.f. Не забудьте вернуться в диалоговое окно "Languages" ("Языки") и сделать сброс – в противном случае, веб-страницы будут отображаться на испанском или немецком языке.

Часть II - Тестирование imageCopyrightHandler

Как только обработчик авторских прав JPG начал работать, необходимо определить насколько быстро функционирует код. Инсталлируйте IIS6.0 Resource Kit Tool (Инструмент набора ресурсов IIS 6.0) для запуска тестов:

1. Загрузите по ссылке IIS 6.0 Resource Kit Tools и инсталлируйте их. Выполните пользовательскую установку и инсталлируйте только Web Capacity Analysis Tool (WCAT). WCAT является единственной функцией IIS 6.0 Resource Kit Tools, которую необходимо активировать для проведения тестов.

Примечание: Из-за высокого уровня настройки безопасности Internet Explorer в Windows Server 2008, может появиться диалоговое окно безопасности, сообщающее о блокировке веб-сайта. Для загрузки IIS 6.0 Resource Kit добавьте add *.microsoft.com к списку надёжных сайтов.

2. Создайте папку с именем PERFTEST, например:

md%systemdrive%\perftest

3. Контроллер WCAT запрашивает три входных файла:

  • Скриптовый файл сообщает WCAT, какие URL-адреса к запросу. Каждый URL получает уникальный ClassID.
  • Файл распределения, который указывает WCAT, как должны распределяться запросы по URL-адресам, указанным в скриптовом файле.
  • Файл конфигурации, который настраивает параметры запуска конкретного выполнения, например, продолжительность тестов, количество пользователей HTTP для моделирования и т.д.

Скриптовый файл

Создайте новый файл с именем script.cfg в каталоге perftest и вставьте в него следующий контент:

NEW TRANSACTION
    classId = 1
    NEW REQUEST HTTP
        Verb = "GET"
        URL = "https://localhost/pictures/<your image name>.JPG"
NEW TRANSACTION
    classId = 2
    NEW REQUEST HTTP
        Verb = "GET"
        URL = "https://localhost/pictures/<your image name>.JPG"     

Примечание: Замените запись <your image name> (<имя вашего изображения>) именем файла JPG. При наличии многочисленных файлов JPG можно добавить новую транзакцию. Убедитесь, что каждой транзакции присваивается новый ClassID.

Файл распределения

Файл распределения сообщает WCAT, как будут оцениваться запросы. С двумя URL-адресами, представленными выше, выполним распределение 50/50. Каждый ClassID получает запрашиваемые 50% времени.

Создайте файл с именем %systemdrive%\perftest\distribution.cfg в каталоге perftest и вставьте в него следующий контент:

1 50
2 50               

Файл конфигурации

Ниже представлены рекомендуемые параметры для теста:

  • Продолжительность: 30 секунд
  • Прогрев: 5 секунд   
  • Время восстановления: 5 секунд
  • Клиенты смоделированного Http: 20

Создайте новый файл с именем config.cfg в каталоге perftest и вставьте в него следующий контент:

Warmuptime 5s
Duration 30s
CooldownTime 5s
NumClientMachines 1
NumClientThreads 20

4. Запустите контроллер, выполнив следующие команды:

Cd \perftest
"%programfiles%\IIS Resources\WCAT Controller\wcctl"
    -c config.cfg -s script.cfg -d distribution.cfg -a localhost       

Как только подключаются все клиенты, будет запущен perf test.

5. Поскольку имеется только один клиент, откройте ещё одну командную оболочку с повышенным правом доступа и выполните следующее:

"%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost

Для выполнения данной процедуры с несколькими клиентами установите NumClientMachines в config.cfg  на более высокий номер и подключите клиентов к контроллеру с помощью команды wcclient, указав имя контроллера машины.

Пример: wcclient MyPerfTestControllerMachine

Примечание: При выполнении данного действия на 64-разрядной версии Windows WCAT инсталлируется в каталоге "program files (x86)" , а для запуска WCATнужно использовать %programfiles(x86)% .

5. Вот результаты первого запуска:

########################################################################
WCAT Performance Statistics_________________________________
Server                      :      localhost      ()
#Transactions               :              3      (HTTP/1.1)
Total Async Sockets         :             20      (5 WCAT Pool Threads)
Total Elapsed Time          :             30 Secs (0 Hrs,0 Mins,30 Secs)
Current Connections         :             20
Total Connection Attempts   :            436      (   14/Sec)
Total Connect Errors        :              0      (    0/Sec)
Total Success Connections   :            436      (   14/Sec)
Total Consec. Connect Errors:              0      (    0/Sec)
Total Bytes                 :       32301100      ( 1051 KB/Sec)
Total Bytes Written         :          32264      (    1 KB/Sec)
Total Bytes Read            :       32268836      ( 1050 KB/Sec)
Total Requests              :            436      (   14/Sec)
Total Responses             :            436      (   14/Sec)
Total Socket Reads          :           6976      (  232/Sec)
Total Socket Writes         :            436      (   14/Sec)
Total Parse Errors          :              0      (    0/Sec)
Total Socket Errors         :              0      (    0/Sec)
Total I/O Errors            :              0      (    0/Sec)
Total Internal Errors       :              0      (    0/Sec)
Total Time Outs             :              0      (    0/Sec)
Total 200 OK                :            436      (   14/Sec)
Total 30X Redirect          :              0      (    0/Sec)
Total 304 Not Modified      :              0      (    0/Sec)
Total 404 Not Found         :              0      (    0/Sec)
Total 500 Server Error      :              0      (    0/Sec)
Total Bad Status            :              0      (    0/Sec)
Min. Connect Time           :              0 MS
Avg. Connect Time           :              0 MS
Max. Connect Time           :             16 MS
Min. Resp Time (1st Byte)   :           1281 MS
Avg. Resp Time (1st Byte)   :           1371 MS
Max. Resp Time (1st Byte)   :           1578 MS
Min. Response Time (Last)   :           1281 MS
Avg. Response Time (Last)   :           1373 MS
Max. Response Time (Last)   :           1578 MS
Current Outstanding Connects:              0      (   20 Max)
Current Waitable Connects   :              0      (   20 Max)
Total Asynchronous Connects :            531      (    1/Sec)
Total Discarded Connects    :              0      (    0/Sec)
########################################################################
          

Значимое число для просмотра представляет собой количество запросов в секунду. В данном случае имеется 14 запросов в секунду.

Предостережение - чем больше файлов JPG, тем меньше запросов можно увидеть. Вполне возможно, что компьютер связан с сетью: IIS 7.0 не сможет больше обрабатывать запросы, поскольку сеть насыщается отправленными данными. Лучшие результаты файлов JPG можно увидеть при размере фотографии 200-300 КБ.

Добавление кэширования вывода

Код для динамической вставки сообщения об авторских правах является довольно медленным. Четырнадцать запросов в секунду не является быстрым для веб-сервера. IIS 7.0 выполняет тестирование гораздо лучше. Всё, что необходимо сделать, это создать политику кэширования, которая устанавливает URL-адреса с расширением JPG в кэш-память в режиме ядра. Вот как это можно добавить с политикой кэширования: 

Добавление политики кэширования с помощью IIS 7.0 Management Tool (инструмента управления IIS 7.0)

  1. Перейдите к "Administrative Tools" ("Инструментам администрирования") и выберите "Internet Information Services (IIS) Manager".
  2. Используйте просмотр дерева на левой стороне для перехода к приложению "pictures" ("фотографии").
  3. Выберите пункт меню "Ouput Caching Rules" ("Процедура кэширования выхода"). Нажмите на "Add…" ("Добавить...") в меню "Actions" ("Действия").
  4. Добавьте JPG в качестве "расширения файла" для кэширования.
  5. Выберите "Интервалы времени" в разделе "Монитор кэшированных файлов" и введите 00:00:10 в качестве временного интервала.
  6. Проверьте, установлен ли флажок рядом с "Headers" ("Заголовки") и введите "Accept-Language" ("Принять-язык").

Примечание: Пользовательский интерфейс кэширования выхода недоступен в версиях до Windows Vista Service Pack 1.

Добавление политики кэширования с помощью командной строки

Для выполнения той же самой процедуры с помощью инструмента appcmd введите следующую команду:

%windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures"
    -section:caching /+profiles.[extension='.jpg',duration='00:00:10',
    policy='CacheForTimePeriod',varyByHeaders='Accept-Language']

Повторите запуск выполнения, чтобы увидеть, что и как надо изменить в параметрах конфигурации.

1. Запустите контроллер, выполнив следующие команды:

Cd \perftest
"%programfiles%\IIS Resources\WCAT Controller\wcctl"
    -c config.cfg -s script.cfg -d distribution.cfg -a localhost
      

2. Запустите клиента с помощью следующего действия:

"%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost
        

Примечание: При выполнении данного действия на 64-разрядной версии Windows WCAT инсталлируется в каталоге "program files (x86)" , при этом для запуска WCATнужно использовать %programfiles(x86)% .

Вывод данных по образцу

########################################################################
WCAT Performance Statistics_________________________________
Server                      :      localhost      ()
#Transactions               :              3      (HTTP/1.1)
Total Async Sockets         :             20      (5 WCAT Pool Threads)
Total Elapsed Time          :             30 Secs (0 Hrs,0 Mins,30 Secs)
Current Connections         :             19
Total Connection Attempts   :          13020      (  434/Sec)
Total Connect Errors        :              0      (    0/Sec)
Total Success Connections   :          13019      (  433/Sec)
Total Consec. Connect Errors:              0      (    0/Sec)
Total Bytes                 :      958045737      (31186 KB/Sec)
Total Bytes Written         :         963406      (   31 KB/Sec)
Total Bytes Read            :      957082331      (31155 KB/Sec)
Total Requests              :          13019      (  433/Sec)
Total Responses             :          13019      (  433/Sec)
Total Socket Reads          :         258283      ( 8609/Sec)
Total Socket Writes         :          13019      (  433/Sec)
Total Parse Errors          :              0      (    0/Sec)
Total Socket Errors         :              0      (    0/Sec)
Total I/O Errors            :              0      (    0/Sec)
Total Internal Errors       :              0      (    0/Sec)
Total Time Outs             :              0      (    0/Sec)
Total 200 OK                :          13019      (  433/Sec)
Total 30X Redirect          :              0      (    0/Sec)
Total 304 Not Modified      :              0      (    0/Sec)
Total 404 Not Found         :              0      (    0/Sec)
Total 500 Server Error      :              0      (    0/Sec)
Total Bad Status            :              0      (    0/Sec)
Min. Connect Time           :              0 MS
Avg. Connect Time           :              0 MS
Max. Connect Time           :             63 MS
Min. Resp Time (1st Byte)   :           0 MS
Avg. Resp Time (1st Byte)   :           33 MS
Max. Resp Time (1st Byte)   :           125 MS
Min. Response Time (Last)   :           0 MS
Avg. Response Time (Last)   :             45 MS
Max. Response Time (Last)   :            141 MS
Current Outstanding Connects:              0      (   20 Max)
Current Waitable Connects   :              0      (   20 Max)
Total Asynchronous Connects :          14093      (  147/Sec)
Total Discarded Connects    :              0      (    0/Sec)
########################################################################

Улучшенные способы кэширования вывода

Счётчики  

Для уточнения производительности в выходном кэше посмотрите на счётчик кэширования вывода на "Reliability and Performance Monitor" ("Мониторе надёжности и производительности"). Существует много интересных счётчиков. Вот один пример того, как использовать "Монитор надёжности и производительности" вместе с кэшированием вывода.

  1. В Windows Server 2008 запустите PerfMon через меню Start (Пуск). Пройдите в "Administrative Tools" ("Инструменты администрирования") и нажмите на "Reliability and Performance Monitor" ("Монитор надёжности и производительности"). В Vista на панели управления находятся "Administrative Tools" ("Инструменты администрирования").
  2. Выберите "Performance Monitor" ("Монитор производительности") в просмотре дерева на правой стороне и нажмите на большой знак "+" на панели управления.
  3. Перейдите на счётчик "Web Service Cache" ("Кэш веб-сервиса") и нажмите на него, чтобы выполнить открытие.
  4. Добавьте счётчик "Total URIs Cached" ("Общее количество кэшированных URI-унифицированных индикаторов ресурса").
  5. Перезапустите тестирование WCAT.

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

Процедура кэширования в режиме ядра IIS

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

Кэширование контента в режиме ядра позволяет веб-сайту проходить быстрее. Модифицируйте конфигурацию приложения фотографий для использования кэширования в режиме ядра. Вот как выглядит текущая конфигурация (%systemdrive%\inetpub\wwwroot\pictures\web.config):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <directoryBrowse enabled="true" />
        <caching>
            <profiles>
                <add extension=".jpg" policy="CacheForTimePeriod"
                duration="00:00:10" varyByHeaders="Accept-Language" />
            </profiles>
        </caching>                  
  </system.webServer>
</configuration>

Теперь измените её для использования кэширования в режиме ядра:

1. Откройте %systemdrive%\inetpub\wwwroot\pictures\web.config

2. Измените настройку

<caching>
    <profiles>
            <add extension=".jpg" policy="CacheForTimePeriod"
                duration="00:00:10" varyByHeaders="Accept-Language" />
        </profiles>
</caching><}0{><caching>
    <profiles>
            <add extension=".jpg" policy="CacheForTimePeriod"
                duration="00:00:10" varyByHeaders="Accept-Language" />
        </profiles>
</caching>

на следующее:

<caching>
    <profiles>
            <add extension=".jpg" kernelCachePolicy="CacheForTimePeriod"
        duration="00:00:10" />
        </profiles>
</caching>

Можно увидеть, что атрибут varyByHeaders больше не используется. Это происходит потому, что kernelModeCache не поддерживает некоторые функции, которые поддерживаются при кэшировании вывода в пользовательском режиме.

Ограничения кэширования вывода в режиме ядра

Есть два существенных различия между кэшированием вывода в пользовательском режиме и в режиме ядра.

  • Кэширование вывода в режиме ядра не поддерживает модули и функции, которые работают в пользовательском режиме, такие как проверка подлинности и авторизация. Пример: При включенных схемах проверки подлинности, таких как Basic или Windows, политика кэширования не работает. Контент обслуживается, но не кэшируется. См. раздел "Устранение неполадок в кэшировании", где описывается, как выяснить, получает ли контент кэширование. Более подробную информацию о том, почему нельзя получить кэширование в режиме ядра см. is found in this Knowledge Base article.
  • Кэширование вывода в режиме ядра поддерживает атрибут aryByHeaders , но не varyByQuerystring.

 Поиск сбоя в кэшировании

Failed Request Event Buffering (FREB) (Буферизация события неудачного запроса) является лучшим способом выяснения, был ли кэширован тот или иной запрос. FREB даёт информацию о причинах невыполненного кэширования. Вот пример из журнала регистрации FREB. В этом случае, событие HTTPSYS_CACHEABLE говорит о том, что запрос не получит кэширование, потому что кэширование в режиме ядра невозможно.

Для получения более подробной информации о том, как работать с FREB см.this IIS.NET article

Используйте следующую команду для определения, какой контент кэшируется в режиме ядра:

netsh http show cachestate

Сложности кэширования

Даже при активации кэширование вывода IIS7.0 не сразу кэширует запрос. Запрос должен быть сделан несколько раз, прежде чем IIS 7.0 примет его в качестве "cache worthy" ("заслужающего внимания для кэширования"). Настройку значения, заслужающего внимания для кэширования, можно выполнить в разделе ServerRuntime, описанного в MSDN article.

Два свойства, определяющие привлекательность для кэширования, представлены как frequentHitTimePeriod и frequentHitThreshold. Запрос кэшируется только в случае, если большое количество запросов <frequentHitThreshold> для кэшируемых URL-адресов приходят во время <frequentHitTimePeriod>.

Настройка по умолчанию для frequentHitTimePeriod составляет 10 секунд.

Настройка по умолчанию для frequentHitThreshold составляет 2 секунды.

Кэширование наиболее популярных страниц

В приведённом выше примере все файлы с расширением JPG помещаются в кэш-память. Это не всегда работает, потому что иногда есть желание выбрать и поместить только специфические документы в кэширование вывода. Вот как это можно сделать с помощью наиболее часто запрашиваемой страницы, документа по умолчанию:

  1. Создайте файл с именем default.aspx в каталоге %systemdrive%\inetpub\wwwroot\pictures и добавьте следующий код:

    <%=DateTime.Now%>

  2. Перейдите к "Administrative Tools" ("Инструменты администрирования") и выберите "Internet Information Services (IIS) Manager".
  3. Используйте просмотр дерева на левой стороне для перехода к приложению "pictures" ("фотографии").
  4. Нажмите на "Content View" ("Просмотреть контент") в верхней части страницы.
  5. Выберите документ по умолчанию, например, страница default.aspx.
  6. Нажмите на "Switch to feature view" ("Переключить на просмотр функции") в меню "Actions" ("Действия") справа. Каждая сделанная настройка теперь будет применяться только к документу по умолчанию.
  7. Откройте настройку "Output Caching Rules" ("Процедура кэширования вывода") 
  8. Добавьте ".aspx" в качестве расширения файла.
  9. Выберите"kernel-mode caching" (кэширование в режиме ядра), после чего можно выбрать"At time intervals" ("Во временных интервалах") и активируйте "Monitor cached files" ("Монитор кэшированных файлов"), введите 00:00:30 в качестве временного интервала.
  10. Пролистайте https://localhost/pictures с браузером "Internet Explorer". При постоянном обновлении страницы (нажмите на Ctrl+F5, чтобы убедиться, что он не из кэша браузера), можно увидеть, что время не изменится в течение 30 секунд.

Резюме

Использование функции кэширования вывода IIS 7.0 для полу-динамического контента может улучшить веб-сайт. Можно увидеть значительное повышение производительности и пропускной способности. Простого изменения конфигурации достаточно, чтобы воспользоваться этой функцией.