压缩你的 ASP.NET 2.0 页面






4.11/5 (3投票s)
一篇关于如何压缩 ASP.NET 页面的输出流的文章。
引言
如果你的网站稍微成功一点,你很快就能感受到钱包的压力。 带宽通常是网站价格的一个成本因素。 可以通过一些压缩标准来限制带宽。 当我找到 Ben Lowery 的模块时,我正在寻找一种压缩我的 ASP.NET 页面的方法,该模块可以在 这里找到。 但他的实现从未正常工作,至少在我的情况下,在 .NET 1.1 和 .NET 2.0 中都是如此。
我下载了他的代码并阅读了它,它完全是 .NET 1.1 风格,并且仍然像在使用 #ziplib 一样编写。 因此,我重写了他的版本,使其能够正常工作,并且能够正确检测路径。 在我的例子中,每当我尝试使用他的库时,页面的输出都是空的。
使用代码
使用代码非常简单。 编译 HttpCompress
模块后,你可以将其引用添加到任何 .NET 2.0 站点。 接下来,你应该在 web.config 中设置一些参数,然后就可以开始了。 如果你想查看内容是否真的被过滤,你需要一些记录 HTTP 管道的东西。 我使用 Nikhil Kothari 的 WebDevHelper BHO 来执行此操作。 另一种选择是使用 Fiddler。
首先可以配置的是要从压缩中排除的路径和 mime 类型。 例如,我不压缩任何图像,也不压缩流式视频等,因为这些格式已经压缩得很好,压缩它们不会带来任何明显的收益。 你更有可能以很小的收益消耗更多的服务器资源。
<configuration>
<configSections>
<sectionGroup name="Flanders">
<section name="HttpCompress"
type="Flanders.Library.Modules.HttpCompress.
Configuration, HttpCompress"/>
</sectionGroup>
</configSections>
<Flanders>
<HttpCompress compressionType="GZip">
<ExcludedPaths>
<add path="NoCompression.aspx"/>
</ExcludedPaths>
<ExcludedMimeTypes>
<add mime="image/jpeg"/>
</ExcludedMimeTypes>
</HttpCompress>
</Flanders>
<system.web>
<httpModules>
<add name="HttpCompressModule"
type="Flanders.Library.Modules.HttpCompress.
HttpModule,HttpCompress"/>
</httpModules>
</system.web>
</configuration>
在模块中,你需要将一个事件挂接到 PostReleaseRequeststate
。 以前,我将其挂接到 BeginRequest
事件,但这个事件执行得太早了,模块无法执行。 在 PostReleaseRequestState
,整个页面已经执行完毕,并且其响应内容已经生成。
41 public void Init(HttpApplication context)
42 {
43 context.PostReleaseRequestState+=
new EventHandler(context_PostReleaseRequestState);
44 }
历史
- 2006年7月1日:v.1.0 - 将内容添加到 CodeProject 并撰写本文。
- 2006年1月23日:v.1.1 - 由于 JavaScript 处理问题以及更多问题而重构了模块 ;-)。