为什么我的页面仍然没有被压缩?

时间:2009-06-16 07:25:47

标签: asp.net-mvc iis-6 compression

在YSlow的帮助下,我试图稍微调整一下页面 我认为压缩页面会有很大的收获。 尝试了herehereherehere后的所有内容后,YSlow仍显示我的网页已被压缩。

我在IIS6上使用asp.net mvc 1.0。

在我的global.asax中使用以下规则,我确保我的静态内容不会被MVC处理。

routes.Clear();
// Turns off the unnecessary file exists check 
routes.RouteExistingFiles = true;
// Ignore text, html, files.
routes.IgnoreRoute("{file}.txt");
routes.IgnoreRoute("{file}.htm");
routes.IgnoreRoute("{file}.html");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Ignore the content directory which contains images, js, css & html   
routes.IgnoreRoute("Content/{*pathInfo}");
//Exclude favicon (google toolbar request gif file as fav icon which is weird)   
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.([iI][cC][oO]|[gG][iI][fF])(/.*)?" });

这将确保我的js和css文件可以静态访问。

这些是我的metabase.xml的相关剪辑

<IIsCompressionScheme   Location ="/LM/W3SVC/Filters/Compression/deflate"
        HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
        HcCreateFlags="0"
        HcDoDynamicCompression="TRUE"
        HcDoOnDemandCompression="TRUE"
        HcDoStaticCompression="TRUE"
        HcDynamicCompressionLevel="9"
        HcFileExtensions="htm
            html
            txt
            css
            js
            mvc"
        HcOnDemandCompLevel="10"
        HcPriority="1"
        HcScriptFileExtensions="asp
            dll
            exe"
    >
</IIsCompressionScheme>

<IIsCompressionScheme   Location ="/LM/W3SVC/Filters/Compression/gzip"
        HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
        HcCreateFlags="1"
        HcDoDynamicCompression="TRUE"
        HcDoOnDemandCompression="TRUE"
        HcDoStaticCompression="TRUE"
        HcDynamicCompressionLevel="9"
        HcFileExtensions="htm
            html
            txt
            css
            js
            mvc"
        HcOnDemandCompLevel="10"
        HcPriority="1"
        HcScriptFileExtensions="asp
            dll
            exe"
    >
</IIsCompressionScheme>

(meta:不确定我是应该把它放在SO还是SF上)

1 个答案:

答案 0 :(得分:4)

问题是压缩与扩展相关,您需要指定应获得静态或动态压缩的所有扩展。您可以通过分别查看HcFileExtensions和HcScriptFileExtensions属性来看到这一点。

因此,对于MVC,你不必拥有文件扩展名,你不会对动态内容进行任何压缩。 IIS7采用不同的方式,因为它使用mimeTypes列表来触发压缩。带有集成管道的IIS7是我们真正希望放置MVC应用程序的地方。在IIS6中它可能,但它是一个kludge和压缩是伤亡之一。

修改

对于IIS6上的静态内容请记住,压缩发生在一个单独的线程上,并在第一次请求资源后触发,第一个请求本身就是未压缩的。然后应使用压缩版本提供对资源的后续请求。