代码改变世界

在IIS中配置json数据压缩

2012-09-10 21:24  quanhb  阅读(2520)  评论(0编辑  收藏  举报

IIS中配置json数据压缩

在Web应用性能优化的过程中,当后台数据库的性能优化到一定程度以后,性能瓶颈一般会转到网络传输层面。然而网络带宽一般是我们很难控制的,在企业局域网内部网络环境要好些,但是当需要通过互联网或VPN访问我们的系统时,网络就显得尤为重要。这时,在服务器CPU资源较为充足、或较容易扩展时,我们可以考虑对数据进行压缩。

可以直接在IIS7的界面上启用压缩选项,如下图所示(需要在安装IIS的时候安装此选项,默认不会安装):

我一直认为启用这两个选项,所有的请求都可以被压缩了,但今天深入研究了下,发现很多ajax请求返回的json数据都没有压缩。只压缩了一般的静态内容,如css、js文件和动态页面的内容。要看一个请求有没有被压缩,用Firebug看响应头就知道了:

现在一般浏览器都是支持gzip压缩的,请求头里面都有(deflate是另一种压缩格式):

目前,对于一般网站来说,都大量使用了json来传递数据,如果能够压缩这些数据,那么系统的性能必将大幅提升,当然前提是CPU资源充足。在查阅一番资料以后,发现可以通过配置Windows\System32\inetsrv\config\目录下的applicationHost.config文件来启用json数据的压缩。看来微软也是有很多后台配置没做到界面上来。该文件中关于压缩的配置默认是这样的(位于<configuration>节下面的<system.webServer>节):

在其中的<dynamicTypes>(即动态压缩类型)节中增加以下两个配置即可:

<add mimeType="application/json" enabled="true" />

<add mimeType="application/json; charset=utf-8" enabled="true" />

注:用记事本添加完毕,保存时会提示权限错误,我采用的办法是另存到桌面上,再复制过去。

配置完毕后重启IIS,再用Firebug监控,就可以明显看到请求响应数据变小,gzip的压缩率一般可以达到30%以下,这意味这500KB的数据可以压缩到150KB以下。尽情享受压缩带来的顺畅吧,别忘了监控CPU使用率哦。

参考资料:http://forums.iis.net/p/1155809/1895877.aspx