65.9K
CodeProject 正在变化。 阅读更多。
Home

压缩你的 ASP.NET 2.0 页面

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.11/5 (3投票s)

2006年1月6日

MIT

2分钟阅读

viewsIcon

171087

downloadIcon

1512

一篇关于如何压缩 ASP.NET 页面的输出流的文章。

A screenshot of the trace

引言

如果你的网站稍微成功一点,你很快就能感受到钱包的压力。 带宽通常是网站价格的一个成本因素。 可以通过一些压缩标准来限制带宽。 当我找到 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 处理问题以及更多问题而重构了模块 ;-)。
© . All rights reserved.