ASP.NET压缩技术

4

在之前的一篇文章中,我试图提高我的网站性能,因此我一直在研究HTTP压缩。我已经了解了如何在IIS中设置它,但似乎这是一个全局设置,适用于所有IIS应用程序池。由于还有另一个网站在运行,我可能无法这样做。然后我看到了一些代码可以在global.asax中放置,以实现每个网站的相同效果。

请参见这里http://www.stardeveloper.com/articles/display.html?article=2007110401&page=1]1

这与在IIS中进行的设置一样好吗?效果有多显著?是否存在任何已知问题?

6个回答

4
如果您决定继续进行,我建议使用HttpModule而不是global.asax。 HttpModule允许您通过配置更改禁用压缩,而无需重新构建,并使您能够单独处理压缩程序集而不影响您的Web应用程序。
Rich Crane在这里提供了一个非常好的2.0模块:http://www.codeplex.com/httpcompression/,如果您想快速上手。
Steven Rogers提到的blowery项目也是一个HttpModule。
否则,编写自己的模块非常简单。 HttpModule为您提供与global.asax相同的事件 - BeginRequest,EndRequest以及更细粒度的事件(例如PostReleaseRequestState和PreSendRequestHeaders),您可能需要解决所有问题。
至于IIS压缩与HttpModule,IIS肯定更容易,因为您不必费心处理另一个程序集。 我已经在商业应用程序中使用了这两种方法,它们在负载测试下的表现都差不多。 如果可以使用IIS,我建议使用它。
在HTML、JS、CSS和XML文件中,通常使用gzip进行60%到80%的压缩。请注意,您的大量负载可能是图像和多媒体对象,这些对象更难压缩。

1

0

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


0

我认为如果你在共享托管环境中,例如没有访问IIS配置的情况下,Global.asax选项将是一个不错的选择。

IIS 6提供基本的压缩支持,但如果你已经使用IIS 7,它提供了出色的HTTP压缩支持,你可以在配置文件中定义哪些文件根据其MIME类型进行压缩...


0

它实现了与IIS压缩基本相同的功能 - 最终都会使用gzip压缩发送响应。我最近实施了这种方法,并且它始终可以将响应大小减少60%,而无需担心性能影响。

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

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

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


0

JavaScript和VBScript存在问题。在codinghorror article的评论中,xxldaniel确认了JavaScript的问题,而我在使用JSON类似的“Scripting.Dictionary”和“Microsoft.XMLHTTP”请求时遇到了VBScript(用于M$ Office自动化)的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接