4

从之前关于尝试提高网站性能的帖子中,我一直在研究 HTTP 压缩。我已经阅读了有关在 IIS 中设置它的信息,但对于所有 IIS 应用程序池来说,这似乎是一个全局性的事情,我可能不允许这样做,因为它上面还有另一个站点正在运行。然后我看到了一些代码放入 global.asax 以在每个网站的基础上实现相同的目标。

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

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

4

6 回答 6

4

如果你继续这样做,我建议实施 HttpModule 与 global.asax。HttpModule 允许您通过配置更改而不是重建来禁用压缩,并允许您使用与 Web 应用程序分开的压缩程序集进行猴子。

Rich Crane 在这里有一个相当不错的 2.0 模块:http: //www.codeplex.com/httpcompression/如果您想快速启动和运行。

Steven Rogers 提到的吹风机项目也是一个 HttpModule。

否则,编写自己的代码非常简单。HttpModule 为您提供与 global.asax 相同的事件 - BeginRequest、EndRequest 和更细粒度的事件,如 PostReleaseRequestState 和 PreSendRequestHeaders,您可能需要消除所有这些问题。

就 IIS 压缩与 HttpModule 而言,IIS 绝对更容易,因为您不必为另一个程序集大惊小怪。我在业务应用程序中使用了这两种方法,并且在负载测试下两者的性能大致相同。如果 IIS 可用,我会说使用它。

gzip 对 HTML、JS、CSS 和 XML 文件进行 60% 到 80% 的压缩是很常见的。请记住,您的许多有效负载可能是更难压缩的图像和多媒体对象。

于 2008-10-15T04:33:16.307 回答
1

http://blowery.org/httpcompress/

我们在我的工作中使用了这个压缩工具有一段时间了。不错。

于 2008-10-14T22:06:11.317 回答
0

我认为 Global.asax 选项将是一个很好的选择,例如,如果您在共享主机环境中,您无法访问 IIS 配置。

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

于 2008-10-14T20:32:26.637 回答
0

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

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

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

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

于 2008-10-14T20:42:20.207 回答
0

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

于 2009-03-23T12:51:32.237 回答
0

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

于 2009-07-15T13:33:45.520 回答