使用 gzip 压缩组件的 D 级
我使用了 YSlow Firefox 插件,它返回以下结果:
----------------------------------- -------------------------------------------------- ----
使用 gzip 压缩组件的 D 级
有 3 个纯文本组件应压缩发送
* http://localhost:63808/WebSite/BemVindo/
* http://localhost:63808/WebSite/css/Global.css?...
* http://localhost:63808/WebSite/js/Global.js?...
-------------------------------- -------------------------------------------------- --------
所以我开始搜索并得到了这段代码:
Global.asax
Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs)
Dim Response As HttpResponse = HttpContext.Current.Response
Dim AcceptEncoding As String = HttpContext.Current.Request.Headers("Accept-Encoding")
If Not String.IsNullOrEmpty(AcceptEncoding) AndAlso AcceptEncoding.Contains("gzip") OrElse AcceptEncoding.Contains("deflate") Then
If AcceptEncoding.Contains("deflate") Then
Response.Filter = New System.IO.Compression.DeflateStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
Response.AppendHeader("Content-Encoding", "deflate")
Else
Response.Filter = New System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
Response.AppendHeader("Content-Encoding", "gzip")
End If
End If
Response.AppendHeader("Vary", "Content-Encoding")
End Sub
现在我有了:
使用 gzip 压缩组件的 A 级
很好,嗯?问题是:Application_PreRequestHandlerExecute 事件是 gzip/deflate 请求的最佳位置吗?
I used the YSlow Firefox add-on and it return the follow result:
-----------------------------------------------------------------------------------------
Grade D on Compress components with gzip
There are 3 plain text components that should be sent compressed
* http://localhost:63808/WebSite/BemVindo/
* http://localhost:63808/WebSite/css/Global.css?...
* http://localhost:63808/WebSite/js/Global.js?...
-----------------------------------------------------------------------------------------
So I started to search and got this piece of code:
Global.asax
Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs)
Dim Response As HttpResponse = HttpContext.Current.Response
Dim AcceptEncoding As String = HttpContext.Current.Request.Headers("Accept-Encoding")
If Not String.IsNullOrEmpty(AcceptEncoding) AndAlso AcceptEncoding.Contains("gzip") OrElse AcceptEncoding.Contains("deflate") Then
If AcceptEncoding.Contains("deflate") Then
Response.Filter = New System.IO.Compression.DeflateStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
Response.AppendHeader("Content-Encoding", "deflate")
Else
Response.Filter = New System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
Response.AppendHeader("Content-Encoding", "gzip")
End If
End If
Response.AppendHeader("Vary", "Content-Encoding")
End Sub
And now I have:
Grade A on Compress components with gzip
Fine, hum? The question is: Is the Application_PreRequestHandlerExecute event the best place to gzip/deflate the requests?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不确定,但您的代码可能会导致使用 Ajax 的页面出现问题。以下页面显示了类似的代码,但如果检测到 Ajax,则取消压缩: 在 ASP.NET 页面中启用 Gzip 和 Deflate HTTP 压缩。我用VB翻译了代码,但没有尝试。
埃里克·
恩德·替补
Not sure but your code might cause problem in pages using Ajax. The following page shows a similar code but cancel the compression if Ajax is detected: Enabling Gzip and Deflate HTTP Compression in ASP.NET pages. I translated the code in VB but didn't tried it.
Eric
End Sub
是的,Application_PreRequestHandlerExecute 事件是 gzip/deflate 请求的最佳位置。
Yes, the Application_PreRequestHandlerExecute event is the best place to gzip/deflate the requests.