通過GZIP或DEFLATE方式對所有頁面進行壓縮,會大大縮小頁面傳輸的容量。
可以使用Fiddler2來觀察使用壓縮後頁面大小的變化。
在項目中添加Global.asax,然添加如下代碼:
1 protected void Application_BeginRequest(object sender, EventArgs e)
2 {
3 HttpApplication app = (HttpApplication)sender;
4 string acceptEncoding = app.Request.Headers["Accept-Encoding"];
5 Stream prevUncompressedStream = app.Response.Filter;
6 if (acceptEncoding == null || acceptEncoding.Length == 0) return;
7 acceptEncoding = acceptEncoding.ToLower();
8 if (acceptEncoding.Contains("gzip"))
9 {
10 // gzip
11 app.Response.Filter = new GZipStream(prevUncompressedStream, CompressionMode.Compress);
12 app.Response.AppendHeader("Content-Encoding", "gzip");
13 }
14 else if (acceptEncoding.Contains("deflate"))
15 {
16 // defalte
17 app.Response.Filter = new DeflateStream(prevUncompressedStream, CompressionMode.Compress);
18 app.Response.AppendHeader("Content-Encoding", "deflate");
19 }
20 }
修正:
這種方法是我無意中在網上找到的,我在實際的項目中並沒有使用,壓縮的效果是有的,但是對服務器端的資源占用情況我沒有測試過,所以不是太清楚這個和IIS中設置壓縮的方式那個好。暫時只是做一個代碼備份,以後用空在研究。
另外,這個方法還是有缺點的,我在試驗中發現使用後會導致.net自帶的TreeView的小圖標失效。原因是TreeView在使用默認的小圖標時,圖片文件是通過WebResource.axd獲取的,而壓縮後就無法獲取到圖片了,所以在代碼開始時對請求的文件進行過濾,對WebResource.axd不進行壓縮。