从之前关于尝试提高网站性能的帖子中,我一直在关注HTTP压缩。我已经阅读过有关在IIS中进行设置的内容,但它似乎对所有IIS应用程序池都是全局性的,因为还有另一个站点在运行,所以我可能不允许这样做。然后我看到一些代码放在global.asax中,以便在每个网站上实现相同的功能。

See Here http://www.stardeveloper.com/articles/display.html?article=2007110401&page= 1] 1

这和IIS中的设置一样好吗?效果有多大?任何已知的问题?

有帮助吗?

解决方案

如果你继续这样做,我建议实现一个HttpModule与global.asax。 HttpModule允许您通过配置更改与重建禁用压缩,并允许您将压缩程序集与Web应用程序分开。

Rich Crane在这里有一个相当不错的2.0模块: http://www.codeplex.com/httpcompression/ 如果你想快速起步和跑步。

史蒂文罗杰斯提到的 blowery 项目也是一个HttpModule。

否则,编写自己的内容非常简单。 HttpModule为您提供与global.asax相同的事件 - BeginRequest,EndRequest和更精细的事件,如PostReleaseRequestState和PreSendRequestHeaders,您可能需要消除所有皱纹。

就IIS压缩verus HttpModule而言,IIS肯定更容易,因为你不必为另一个程序集大惊小怪。我已经将这两种方法用于商业应用程序,并且两者都在负载测试下同等地执行。如果IIS可用,我会说使用它。

HTML,JS,CSS和XML文件的压缩率在60%到80%之间,与gzip相同。请记住,您的许多有效负载可能是图像和多媒体对象,这些对象更难以压缩。

其他提示

http://blowery.org/httpcompress/

我们已经在我的工作中使用了这个压缩实用程序一段时间了。非常好。

如果您位于共享托管环境中,我认为Global.asax选项会很好,例如,您无法访问IIS配置。

IIS 6提供了基本的压缩支持,但是如果你已经在IIS 7中,那么它为你提供了很好的 HTTP压缩支持,您可以根据配置文件中的MIME类型定义哪些文件被压缩...

它实现了与IIS压缩基本相同的功能 - 最终都通过gzip压缩发送响应。我最近实施了这种方法,它一直将响应大小减少了60%,没有值得担心的性能影响。

有一些可能的问题。首先,您需要注意输出缓存。您需要使用自定义VaryBy来确保为具有不同Accept-Encoding标头的请求缓存不同版本。否则,如果压缩版本被缓存,则所有用户都将收到它,无论他们的浏览器是否可以接受它。

其次,如果使用Response.End或Response.Flush,GZipStream有时会截断响应中的最后几个字符,因为直到太晚才关闭流。我不知道有什么好的解决方案。

最后,这只会压缩您的HTML。任何CSS或Javascript文件都将正常提供。例如,您需要通过自定义IHttpHandler提供这些文件来压缩它们。

JavaScript和VBScript存在问题。 JavaScript问题已在xxldaniel对编码错误文章的评论中得到确认,我使用类似JSON的“Scripting.Dictionary”与VBScript(用于M $ Office自动化)有问题。使用“Microsoft.XMLHTTP”请求。

您可以尝试 mod_gzip 模块。它使用托管ZLib版本,并允许高度可调配置。语法与同名的Apache模块兼容,甚至可以扩展。因此,例如,您可以为不同的mime类型设置不同的压缩级别,等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top