网站性能优化之开启服务器端http压缩
公司的一个项目由于管理和开发方面的一些问题,导致开发完成之后,一个js文件变的很大,minimize之后还有700kb, 影响了网站的性能,特别是在网速慢的时候,加载一个页面居然要2分钟。招来了一大堆的客户投诉。。。
解决这个问题最理想的办法是分解这个超大js文件,只加载所需的javascript。但是由于最初的开发人员都已经不再了,这个分解任务风险系数太高,不能轻易尝试(客户要求很高,一旦出错很难和客户解释)。为了提高在低网速下的网站反应时间,我想到了用服务器端压缩http响应内容的办法,以此来减少网络数据传输。
IIS 7.0改进了服务器端压缩的方法,使其更加容易配置和使用。
这里是微软官方网站的一个详细介绍和配置https://www.iis.net/configreference/system.webserver/httpcompression
IIS 7.0以及更高版本提供了2种压缩方法:
1. 静态压缩:压缩服务器端的静态内容,如*.js,*.css等。它会降压缩后的内容缓存到如下路径:%windir%\inetpub\temp\IIS Temporary Compressed Files\ApplicationPool\
2. 动态压缩:压缩服务器端动态生成内容,如*.aspx等。开启动态压缩之后,服务器每次输出动态内容之前都会进行压缩,进而比较耗资源。
IIS 7.0以及更高版本支持2种压缩方法:
1. Deflate: 压缩率较Gzip更高,但除了浏览器之外,支持Deflate的平台并没有Gzip多。
2. Gzip(GNU zip) : 推荐设置此种压缩方法。
如何通过修改web.config来开启Gzip压缩
ApplicationHost.config是IIS 7.0之后引入的一个IIS配置文件,详细内容参考官方链接http://www.iis.net/learn/get-started/planning-your-iis-architecture/introduction-to-applicationhostconfig
该文件的的位置%windir%\system32\inetsrv\config
http压缩的相关配置如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" /> <dynamicTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="*/*" enabled="false" /> </dynamicTypes> <staticTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="application/atom+xml" enabled="true" /> <add mimeType="application/xaml+xml" enabled="true" /> <add mimeType="*/*" enabled="false" /> </staticTypes> </httpCompression> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> </system.webServer> </configuration>
<httpCompression>节点用于配置静态压缩和动态压缩,<urlCompression>则用于开关http压缩。IIS 7.0默认开始静态压缩而关闭动态压缩,IIS 7.5及之后版本则默认开启静态压缩和动态压缩。将urlCompression节点的doStaticCompression和doDynamicCompression属性设为true即为开启压缩。在设置完成之后,重启IIS,之后去前台测试,发现700KB的js文件压缩到了300KB,效果还是不错的。
需要注意的是,ApplicationHost.config里面的配置是IIS的全局配置,会影响所有的网站。如果只想为某个网站开启http压缩,可通过修改ApplicationHost.config下httpCompression配置,将overrideModelDefault属性设置Allow,允许它在每个网站的web.config里面重新配置(urlCompression默认已经允许在web.config里重新配置)。
<section name="httpCompression" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />