IIS压缩及性能优化(转载)

IIS压缩并不是一项新技术,但对于SharePoint站点而言,IIS压缩能起到很大的作用。在IIS服务器上启用IIS压缩功能之后,在IIS服务器把页面内容发送给浏览器之前,会在服务器上先把内容进行压缩,然后发送压缩后的数据,浏览器接收到数据后,会自动进行解压,然后显示。由于在网络上传输的数据被压缩了,所以可以将页面内容更快的传送到浏览器,提高页面浏览速度。

虽然IIS服务器上对页面内容进行压缩会耗费一定的CPU时间,但这对于现在主流服务器CPU而言,已经不会造成什么问题。而且这点CPU时间与节省的数据传输时间相比,实在是太划算了。每次压缩过一个页面之后,IIS会将压缩后的文件缓存到磁盘上,这样可以避免下次再重复压缩。

在IIS服务器上启用IIS压缩虽然可以通过图形界面的IIS管理器完成,但有些配置仅仅通过IIS管理器是做不了的,所以,我们使用IIS的一个脚本工具来进行所有的管理和配置。下面的指令需要在服务器上的命令提示符中执行。

在IIS服务器上启用静态文件(.js、.css、.html之类)压缩:
cscript C:\Inetpub\adminscripts\adsutil.vbs set w3svc/filters/compression/parameters/HcDoStaticCompression true

在IIS服务器上启用动态文件(.asp之类)压缩:
cscript C:\Inetpub\adminscripts\adsutil.vbs set w3svc/filters/compression/parameters/HcDoDynamicCompression true

在动态文件压缩中添加“.aspx”文件类型(SharePoint站点所有页面都是.aspx的),要执行两条指令:
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3SVC/Filters/Compression/Deflate/HcScriptFileExtensions "asp" "dll" "exe" "aspx"
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcScriptFileExtensions "asp" "dll" "exe" "aspx"


将默认的压缩率提高,也是两条指令:
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel "9"
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel "9"


启用IIS压缩后,到底能为我们节省多少数据传输呢?我们可以简单的测试一下。我们使用Microsoft Fiddle,这个好用且强大的工具。它原理上是一个代理,能让浏览器通过它去获取HTTP内容,它则自动记录浏览器的访问历史数据。Fiddle可以在http://www.fiddlertool.com/fiddler/version.asp下载。

首先,关闭IIS压缩,清空浏览器缓存,然后在IE中访问MOSS 2007的默认站点首页,在Fiddle中记录下的访问历史数据如下:

Request Count:     29
Bytes Sent:     11,089
Bytes Received: 676,934

这些信息表示,浏览器一共请求了29项资源,服务器一共向浏览器发送了676K数据。676K!这仅仅是默认的MOSS 2007站点首页哦!

然后打开IIS压缩功能,再清空浏览器缓存,再次访问一下首页,Fiddle中记录的信息如下:

Request Count:     29
Bytes Sent:     11,089
Bytes Received: 230,276

可以看到,仅仅通过简单的启用IIS压缩功能,MOSS 2007的默认首页所请求的数据大小就从676K减少到了230K。

转自KB博客: http://blog.joycode.com/kaneboy/archive/2007/09/21/108674.aspx

 

自己测试了下:

开启压缩前:

Request Count:  55
Bytes Sent:  30,254
Bytes Received: 550,563

压缩后:

Request Count:  55
Bytes Sent:  30,003
Bytes Received: 307,545

550K和307K 差别好大。

 

 

HTTP 压缩的好处:

静态网页采用HTTP 压缩,大约可以减少20%的传输量。
用户端使用IE 5.0浏览器连线到已经启用HTTP压缩IIS 5.0之Web伺服器,才有HTTP压缩功能。如今,绝大多数的现代浏览器支持压缩技术,但是,具体的压缩方式取决于浏览器。不过你无需对此担心,因为只有浏览器指示支持一种压缩方式时,Web服务器才会发送压缩内容。尽管如此,了解一下这种处理机制和不同浏览器支持的压缩类型也是一件有意义的事。
浏览器在要求一个网址时,会把支持的压缩格式通过Accept-Encoding的HTTP头提交给服务器,IIS或其它Web服务器则从HTTP_ACCEPT_ENCODING环境变量读取这个信息,这个过程无需你人为干预,IIS在浏览器支持压缩的情况下会自动对发送的内容进行合适的编码。
下表列出了常见的浏览器和它们支持的编码类型:
浏览器  支持的编码
Firefox 1.0, Mozilla 1.x, Camino  gzip, deflate
OmniWeb 5.x  bzip2, gzip, deflate
Safari  gzip, deflate
Internet Explorer  gzip, deflate
 
使用 HTTP 压缩:

如果您的站点使用了很大的带宽,或者您希望更加有效地使用带宽,请考虑启用 HTTP 压缩。HTTP 压缩在启用压缩的浏览器和 IIS 之间提供了更短的传输时间。既可以只压缩静态文件,又可以同时压缩静态文件和应用程序响应。如果网络带宽受到限制,使用 HTTP 压缩会很有用(至少对于静态文件来说),除非处理器利用率已经很高。
动态处理会影响 CPU 资源。对动态响应启用压缩后,每次请求动态响应时都会进行压缩。这意味着并不缓存动态响应,每次请求动态响应时,服务器可能需要更多的 CPU 周期来压缩和发送响应。已压缩的静态响应可以被缓存,因此不会像动态响应那样影响 CPU 资源。
HTTP 压缩的工作原理:

IIS 在接收到请求时,将检查浏览器是否允许压缩。然后 IIS 会检查文件扩展名,以确定请求的文件是否为静态文件或包含动态内容。如果文件包含静态内容,IIS 将查看以前是否请求过该文件并且已将该文件以压缩格式存储在临时压缩目录中。如果文件没有以压缩格式存储,IIS 会将未压缩的文件发送到浏览器,并在临时压缩目录中添加此文件的压缩副本。如果文件以压缩格式存储,IIS 会将压缩过的文件发送给浏览器。在浏览器首次请求之前,所有文件都不压缩。
如果文件包含动态内容,IIS 将在生成此响应时进行压缩并将压缩后的响应发送给浏览器。不存储此文件的副本。
压缩静态文件的性能代价较小,而且通常只压缩一次,因为该文件随后被存储在临时压缩目录中。压缩动态生成的文件的代价要高一些,因为它们并不存储,并且每次请求时都必须重新生成。在浏览器上展开文件的代价非常小。压缩文件的下载速度更快,所以对于提高使用有限带宽的网络连接(如调制解调器连接)的所有浏览器的性能特别有好处。
默认情况下,压缩文件的截止日期是 1997 年 1 月 1 日,以防止代理服务器将缓存的压缩文件副本发送到未启用压缩的浏览器。这也意味着浏览器在下一次用户请求时并不显示文件的缓存副本,而是返回服务器请求新副本。
启用 HTTP 压缩:

如果服务器生成大量的动态内容,则需要考虑压缩造成的额外处理代价是否值得付出。如果 % 处理器时间计数器已经达到或超过 80%,则不建议启用 HTTP 压缩。
测试 HTTP 压缩:
要创建一个基线,请使用系统监视器记录几天内“处理器”对象的 % 处理器时间计数器的值。此计数器有一个总实例以及系统中每个处理器的单独实例。(如果服务器有多个处理器,应该同时观察单个处理器和总的处理器情况,以发现工作量分配不平衡之处)此外,还应该记录“网络接口”对象的发送的字节数/秒计数器。 启用压缩并继续在一段时间内记录这些计数器的值,最好是几天,这样就能得到好的对比依据。 将未压缩时的值和压缩过的值相比较。
现在引入正题,
如何配置 Microsoft Internet Information Server 6.0 实现 HTTP 压缩:
有很多第三方工具可以实现 HTTP 压缩,但都是需要购买的,价格在 100 到 300 美圆不等,如:
http://www.port80soft.com/ 的 HTTPZip,如果不希望额外花钱实现这一功能的话,只好自己辛苦一下,接着看吧:
1.首先备份 IIS 的配置文件,
复制 C:\Windows\system32\inetsrv\metabase.xml 到另外的备份文件夹中.
C:\Windows\system32\inetsrv\metabase.xml 是 IIS 的核心配置文件,该文件的完整性一但被破坏,IIS 将无法正常运行,严重到需要重新安装系统.
2. 在开始菜单中启动 Internet 信息服务(IIS)管理器,右键点击“网站”属性,打开“服务”选项卡,勾选“HTTP 压缩”的两个选项。“临时目录”和“临时目录最大容量”可根据需要自行设置。设置完成后点击确定。
3.右键点击“网站”下方的 “Web服务扩展”,添加一个新的Web服务扩展,扩展名填写为“HTTP Compression”或其他,都可以。“要求的文件”添加:c:\windows\system32\inetsrv\gzip.dll ,并勾选“设置扩展状态为允许”,完成后点击确定。
 
4.下面的步骤有些复杂,如果没有确定的把握能理解,最好不要尝试,右键点击“Internet 信息服务的”“本地计算机”属性,勾选“允许直接编辑配置数据库”并确定。
5. 在开始菜单中运行 notepad C:\Windows\system32\inetsrv\metabase.xml ,打开metabase.xml 文件,请在任何改动前再次确认该文件已经备份。
6. 搜索并找到 metabase.xml 文件中的 <IIsCompressionScheme  片段中的 HcScriptFileExtensions,依照原有文件的格式添加你希望进行 HTTP 压缩的文件扩展名,静态文件HcFileExtensions可添加 JS,CSS 等; 动态文件 HcScriptFileExtensions 可添加"ASPX""ASMX",如下:
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"
  HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
  HcCreateFlags="0"
  HcDoDynamicCompression="TRUE"
  HcDoOnDemandCompression="TRUE"
  HcDoStaticCompression="FALSE"
  HcDynamicCompressionLevel="9"
  HcFileExtensions="htm
   html
   js
   css
   txt"
  HcOnDemandCompLevel="10"
  HcPriority="1"
  HcScriptFileExtensions="asp
   aspx
   asmx
   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
   js
   css
   txt"
  HcOnDemandCompLevel="10"
  HcPriority="1"
  HcScriptFileExtensions="asp
   aspx
   asmx
   dll
   exe"
 >
</IIsCompressionScheme>
注意“Compression/deflate”和“Compression/gzip”两个片段都需要修改。动态压缩等级,HcDynamicCompressionLevel 建议设置为“9”
 
7. 保存并关闭 metabase.xml 文件。
8. 重新启动 IIS 服务,运行“IISReset”或重新启动 WWW 服务。
9. 其他:
如果你的服务器上某一个Web站点不希望启用 IIS 压缩,请运行以下脚本:
cscript C:\Inetpub\AdminScripts\adsutil.vbs set w3svc/site#/root/DoStaticCompression False
cscript C:\Inetpub\AdminScripts\adsutil.vbs set w3svc/site#/root/DoDynamicCompression False
如果想增加启用 HTTP 压缩的文件类型,请运行以下脚本:
"" 中为文件扩展名,别忘了把原有的扩展名加上。
静态文件压缩:
CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"
动态文件压缩:
CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "aspx" "asmx" "dll" "exe" "php"

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "aspx" "asmx" "dll" "exe" "php"
将site# 替换为该 Web 站点的 ID。Web 站点的 ID 是什么到“日志记录属性”中看一下日志记录的“日志文件名”前面的路径就知道了。
运行以上脚本前务必备份,运行后再次执行“IISReset”使生效.

Fiddler2  IIS6.0压缩

posted @ 2009-03-02 10:00  邑尘  阅读(1021)  评论(2编辑  收藏  举报