在YSlow的帮助下,我试图稍微调整一下页面 我认为压缩页面会有很大的收获。 尝试了here,here,here和here后的所有内容后,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上)
答案 0 :(得分:4)
问题是压缩与扩展相关,您需要指定应获得静态或动态压缩的所有扩展。您可以通过分别查看HcFileExtensions和HcScriptFileExtensions属性来看到这一点。
因此,对于MVC,你不必拥有文件扩展名,你不会对动态内容进行任何压缩。 IIS7采用不同的方式,因为它使用mimeTypes列表来触发压缩。带有集成管道的IIS7是我们真正希望放置MVC应用程序的地方。在IIS6中它可能,但它是一个kludge和压缩是伤亡之一。
修改强>
对于IIS6上的静态内容请记住,压缩发生在一个单独的线程上,并在第一次请求资源后触发,第一个请求本身就是未压缩的。然后应使用压缩版本提供对资源的后续请求。