すべての静的コンテンツにgzipを追加し、.net4サイトからのhtml出力を追加しています。
また、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圧縮を利用する必要はないことに同意します。メモリ消費量は少し高くなりますが、CPU負荷は大幅に低くなり、ファイルを提供するためのコード内圧縮がはるかに効率的になります。
さて、これの私の全体的なポイントは、Vary:Accept-EncodingヘッダーのIIS上書きを見つけて取り除くことでした。これは、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