http压缩方法(IIS 6.0 与IIS 7.0的详解)
在网上看了有关这方面的博客,再加上自己的实践,整理了一下,希望对大家有所帮助
本片文章采用两种压缩方法:一种是在IIS上开启GZIP压缩,另一种方法是用CompressionModule压缩模块。下面我将分别对IIS 6.0 和 IIS 7.0 的两种方法进行举例。
IIS 6.0
部署IIS 6.0 开启GZIP压缩
1、打开Internet信息服务(IIS)管理器,右击“网站”-->属性”,选择“服务”。进行如图一配置:
图一
2、在Internet信息服务(IIS)管理器,右击“Web服务扩展”-->“添加一个新的Web服务扩展”,在“新建Web服务扩展”框中输入扩展名“HTTP Compression”,添加“要求的文件”为C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中“设置扩展状态为允许”;(见图二)
图二
3、使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份),
找到Location =“/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩
如果需要压缩动态文件,则将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> <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 js css swf html txt" HcOnDemandCompLevel="9" HcPriority="1" HcScriptFileExtensions="asp aspx dll exe" > </IIsCompressionScheme>
注意:
1、在编辑MetaBase.xml前需要停止IIS(开始-->管理工具 --> 服务 找到 IIS Admin Service然后停止)
2、修改完成后开启IIS Admin Service
CompressionModule压缩模块
1、首先,将DC.Web.HttpCompress.dll放到项目的bin目录。
2、配置web.config代码如下:
<configSections> <sectionGroup name="DCWeb"> <section name="HttpCompress" type="DC.Web.HttpCompress.Configuration, DC.Web.HttpCompress" /> </sectionGroup> </configSections> <DCWeb> <HttpCompress compressionType="GZip"> <IncludedMimeTypes> <add mime="text/html" /> </IncludedMimeTypes> </HttpCompress> </DCWeb> <system.web> <httpHandlers> <add verb="*" path="js.axd,css.axd" type="DC.Web.HttpCompress.CompressionHandler,DC.Web.HttpCompress"/> <add verb="*" path="*.gif" type="DC.Web.HttpCompress.ImageHandler,DC.Web.HttpCompress"/> </httpHandlers> <httpModules> <add name="HttpCompressModule" type="DC.Web.HttpCompress.HttpModule,DC.Web.HttpCompress"/> </httpModules> </system.web>
IIS 7.0
部署IIS 7.0 开启GZIP压缩:如图三
图三
图四
CompressionModule压缩模块
1、首先,将DC.Web.HttpCompress.dll放到项目的bin目录。
2、配置web.config代码如下:
1 <configSections> 2 <sectionGroup name="DCWeb"> 3 <section name="HttpCompress" type="DC.Web.HttpCompress.Configuration, DC.Web.HttpCompress" /> 4 </sectionGroup> 5 </configSections> 6 7 <DCWeb> 8 <HttpCompress compressionType="GZip"> 9 <!--设定是否启用cachefiles功能,并指定cache目录,默认为false--> 10 <CacheSettings cacheFiles="true" path="cache" /> 11 <!--设定jspath及csspath,实际应用中可以不设置--> 12 <PathSettings jsPath="kendo/js" cssPath="css" /> 13 <!--设定要压缩何种类型的资源,这里设定了压缩html和javascript,即除了aspx页面(包括所有axd资源)和js外,其它资源不会被压缩,例:如果要压缩gif,请添加<add mime="image/gif"/>--> 14 <!--javascript有很多种表现类型,具体可以借助工具查看其类型--> 15 <IncludedMimeTypes> 16 <add mime="text/html" /> 17 <add mime="application/x-javascript" /> 18 </IncludedMimeTypes> 19 <!--设定不压缩何种类型资源请使用:--> 20 <!--<ExcludedMimeTypes> 21 <add mime="text/html" /> 22 <add mime="application/x-javascript" /> 23 </ExcludedMimeTypes>--> 24 <!--设定不启用压缩的页面路径,下面设定了Test目录下的default.aspx页面将不会启用压缩功能,但其它页面则正常启用压缩--> 25 <!--<ExcludedPaths> 26 <add path="~/Test/Default.aspx" /> 27 </ExcludedPaths>--> 28 </HttpCompress> 29 </DCWeb> 30 31 <system.webServer> 32 <handlers> 33 <add name="DC.Web.HttpCompress" verb="*" path="js.axd,css.axd" type="CompressionHandler"/> 34 </handlers> 35 <modules> 36 <!--设定启用压缩模块的参数--> 37 <add name="HttpCompressModule" type="DC.Web.HttpCompress.HttpModule,DC.Web.HttpCompress"/> 38 </modules> 39 </system.webServer>
注意:
1、ExcludedMimeTypes及IncludedMimeTypes只需要配置一个就可以,如果像上面那样配置的话,则表明html和javascript类型被压缩。
2、<CacheSettings cacheFiles="true" path="cache"/>
那么项目下就必须存在cache这个目录,否则的话会出错,如果项目不想增加这个目录,只需要将这个配置节删掉即可!
测试结果:
在IIS 7.0 中使用CompressionMoudule压缩,压缩率为53.3%
在IIS 6.0 中开启GZIP压缩的压缩率为: 67.3%(可根据在MetaBase.xml文件中的参数进行改变)
总结:
在IIS 7.0中使用CompressionModule压缩模块时引用的DC.Web.HttpCompress.dll可以压缩js、css文件。但在IIS 6.0中使用DC.Web.HttpCompress.dll文件时,对js、css文件就不起作用了。因此有个CompressionModule修复版。
参考博客:
CompressionModule修复版:http://blog.csdn.net/gulijiang2008/article/details/7089076(可以下载修复版的dll文件)
CompressionModule压缩模块:http://www.cnblogs.com/0000/archive/2009/05/22/1487376.html
部署IIS 6.0开启GZIP压缩:http://www.chinaz.com/server/2010/1026/139740.shtml