Как включить сжатие gzip при использовании MVC3 на IIS7? - PullRequest
97 голосов
/ 09 августа 2011

Кто-нибудь знает, как включить сжатие gzip в MVC 3?Я использую IIS7.

Результат аудита Google Chrome:

  1. Включить сжатие gzip (4)
  2. Сжатие следующих ресурсов с помощью gzip может уменьшить ихразмер передачи примерно на две трети (~ 92,23 КБ):
  3. / mydomain / может сэкономить ~ 1,53 КБ
  4. jquery-1.4.4.min.js может сэкономить ~ 51,35 КБ
  5. Cufon.js может сэкономить ~ 11,89 КБ
  6. Futura.js может сэкономить ~ 27,46 КБ

Ответы [ 3 ]

138 голосов
/ 09 августа 2011

Вы можете настроить сжатие через файл web.config следующим образом:

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

Документацию по этому элементу конфигурации можно найти по адресу iis.net / ConfigReference .Это эквивалентно:

  1. Открытие информационных служб Интернета (IIS Manager)
  2. Перемещение по древовидной структуре слева до тех пор, пока вы не достигнете виртуального каталога, который вы хотите изменить
  3. Выбор соответствующего виртуального каталога так, чтобы заголовок правой панели стал именем указанного виртуального каталога.
  4. Выбор «Сжатие» в разделе «IIS» на правой панели
  5. Отметив обе опции и выбрав «Применить» в разделе «Действия» в крайнем правом углу.

Примечание: (как указано в комментариях) Вам необходимо убедиться, чтоHttp Dynamic Compression установлен, иначе настройка doDynamicCompression="true" не будет иметь никакого эффекта.Самый быстрый способ сделать это:

  1. Пуск> Тип optionalfeatures (это самый быстрый способ получить доступ к окну «Включить или отключить функции Windows»)
  2. Навигацияв Internet Information Services> World Wide Web Services> Функции производительности в древовидном меню «Функции Windows»
  3. Убедитесь, что установлен флажок «Сжатие динамического содержимого» * ​​1032 *
  4. Нажмите «ОК» и подождите, пока Windows установит компонент
31 голосов
/ 30 июня 2012

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

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}
12 голосов
/ 09 августа 2011

Сжатие включено / отключено на уровне сервера.См. Модуль сжатия IIS в консоли управления iis.

Вот инструкции для IIS с сайта Microsoft.

...