搞了很久,不如nginx好弄,不知道怎么修改压缩比,也不知道怎么压缩的规则是啥(管理器上没有写),不过反正出来了,一个js文件900多K变成了100多K
1、在web.config文件里面加上:
<configuration>
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="false" />
</system.webServer>
</configuration>
2、启用静态压缩
3、修改了一个配置文件(实际上不知道有没有起作用)
C:\Windows\System32\inetsrv\config > applicationHost.config
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="1024">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/javascript" enabled="true" /> <-- 就只加了这一行,然后iisreset
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
因IIS后期不再使用,不打算深入研究了,能压缩就OK。
PS:好像不稳定,稍隔久一点访问,没有压缩(第一次),强制刷新页面,又都压缩了
解决:
1、web.config修改下:
<configuration>
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="false" />
<serverRuntime enabled="true" frequentHitThreshold="1" frequentHitTimePeriod="00:10:00"/> <-- 加了这一行
</system.webServer>
</configuration>
修改了之后,IIS会报500错误,于是 命令行 执行(解锁serverRuntime节点):
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/serverRuntime
然后就OK了,重启下站点,再访问就都是压缩过的了(原先,每次重启站点,第一次访问,都没压缩,隔久了再访问也是没压缩。)
这篇文章的这部分内容帮助了我:我的就是MetaBase.xml没有IIsCompressionScheme节点的情况! 引自:http://www.cnblogs.com/caicainiao/archive/2011/11/09/2243270.html
偶尔失效(一会有效一会无效)的解决方法
3. 使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份),
找到Location =“/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩,
找到Location =”/LM/W3SVC/Filters/Compression/deflate“用于设置deflate压缩。 上面两个节点紧挨着。并且设置的属性相同。
如果需要压缩动态文件,则将HcDoDynamicCompression设置为”TRUE“,
并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;
如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为”TRUE“,
并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等;
HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数值在0-10, 默认为0。
HcDynamicCompressionLevel属性说明:HcDynamicCompressionLevel Metabase Property
HcOnDemandCompLevel 属性说明:HcOnDemandCompLevel Metabase Property
说明: 这两个属性值一般推荐设置为9, 具有最佳性价比。
<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
js
css
swf
xml"
HcOnDemandCompLevel="9"
HcPriority="1"
HcScriptFileExtensions="asp
aspx
dll
exe">
</IIsCompressionScheme>
注意
1. 在编辑MetaBase.xml前需要停止IIS,可以使用 net stop iisadmin
2. 修改完成后开启iisadmin服务,并执行iisreset命令
关于SEO的测试
压缩是否对SEO有影响,经测试,开启后仍然可以被很好的收录。
关于对SEO影响的研究文章,还可以参考下面的几篇文章。
具体的效率问题,将继续监控以作研究。
如果以上设置无效,或者MetaBase.xml没有响应节点,用以下方式解决
第一种是在web.config中添加以下内容,将frequentHitThreshold调至1,将frequentHitTimePeriod调制10分钟
<system.webServer>
<serverRuntime enabled="true" frequentHitThreshold="1" frequentHitTimePeriod="00:10:00"/>
</system.webServer>
第二种方法是打开%windir%\system32\inetsrv\appcmd.exe,然后再命令行界面中输入以下命令字符串,然后回车
set config -section:system.webServer/serverRuntime -frequentHitThreshold:1
如果 appcmd.exe 窗口执行无法停留,可以执行连续指令:
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/serverRuntime -frequentHitThreshold:1 %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/serverRuntime -frequentHitTimePeriod: 00:10:00