Я добавляю сжатие gzip ко всему моему статическому контенту и выходным html-файлам с моего сайта .net 4.
Я также включил сжатие в IIS 7.5 (как статическое, так и динамическое), и я обнаружил, что включение сжатия в IIS перезаписывает мой заголовок Vary: Accept-Encoding для этих ресурсов.
Итак, мне интересно, действительно ли нужно включать сжатие в IIS, поскольку я уже сжимаю вещи?
Итак, я провел некоторое тестирование и обнаружил следующее:
Utilizing IIS Static and Dynamic Compression, with code compression:
CPU Load: 35%
Memory Load: 28M
Utilizing IIS Static and Dynamic Compression, without code compression:
CPU Load: 34%
Memory Load: 28M
Non-Utilizing Static and Dynamic Compression In IIS, with code compression:
CPU Load: 14%
Memory Load: 32M
Итак, основываясь на моих выводах, я согласен с тем, что нет необходимости использовать сжатие IIS при выполнении этого в коде. Несмотря на то, что потребление памяти немного выше, загрузка ЦП значительно ниже, чтобы сделать сжатие в коде намного более эффективным для обслуживания файлов.
Теперь, на самом деле, вся моя цель заключалась в том, чтобы выяснить и избавиться от перезаписи IIS заголовка Vary: Accept-Encoding. Что, похоже, не влияет на то, включено сжатие IIS или нет. Заголовок по-прежнему не добавляется... так что вы можете помочь с этим?
Вот код кэширования, который я реализую. Обратите внимание, что перед запуском метода, содержащего этот код, я очищаю заголовки с помощью context.Response.ClearHeaders():
With context.Response
.AddHeader("Cache-Control", "store, cache")
.AddHeader("Pragma", "cache")
.AddHeader("Cache-Control", "max-age=21600")
.AddHeader("ETag", Date.Now.Ticks)
.AddHeader("Expires", DateTime.Now.AddYears(1).ToString("ddd, dd MMM yyyy hh:mm:ss") + " GMT")
.AddHeader("Vary", "Accept-Encoding")
.AppendHeader("Vary", "Accept-Encoding")
.Cache.SetVaryByCustom("Accept-Encoding")
.Cache.SetOmitVaryStar(True)
.Cache.VaryByParams.IgnoreParams = True
.Cache.SetAllowResponseInBrowserHistory(True)
.Cache.SetCacheability(Web.HttpCacheability.Public)
.Cache.SetValidUntilExpires(True)
.Cache.SetLastModified(DateTime.Now.AddYears(-1).ToString("ddd, dd MMM yyyy hh:mm:ss") + " GMT")
.CacheControl = "public" '
.Expires = 24 * 60 * 366
.ExpiresAbsolute = DateTime.Now.AddYears(1).ToString("ddd, dd MMM yyyy hh:mm:ss") + " GMT"
End With