Web前端性能优化(四)压缩组件

本文转自:http://www.chinaz.com/web/2015/0417/399723.shtml



基础知识

gzip编码:gzip是GUNzip的缩写,是使用无损压缩算法的一种,最早是用于Unix系统的文件压缩,凭借着良好的压缩效率,现在已经成为Web上使用最为普遍的数据压缩格式。




压缩是如何工作的

Web前端性能优化教程 Web前端优化 Web优化

客户端请求报文中包含Accept-Encoding表示客户端能识别的压缩方法,如果客户端请求报文没有包含Accept-Encoding首部,服务器就会假设客户端能够接受任何编码格式;服务器响应报文中包含Content-Encoding表示采用的压缩方法。(然而,一个统计表明,大约有15%的客户端请求是没有Accept-Encoding请求的,因为客户端的一些web代理和PC安全软件会移除浏览器发出的Accept-Encoding,因为监听未经压缩的响应会占用更少的CPU资源,但却无疑增加了网络传输的时间。)




应该对什么资源使用压缩

基于文本的资源如html,js,css,xml都适用于压缩。然而对于图片而言,却不应该对图片进行压缩,因为图片本身是已经被压缩过了,如果再进行gzip压缩,有可能得到的结果是和图片本身大小相差不大或更大,这样就浪费了服务器的CPU资源来做无用功了。




压缩的优缺点

优点:压缩组件可以减少Http响应时间,提升传输效率。

缺点:服务器要通过花费额外的CPU周期来完成压缩,客户端要对压缩文件进行解压缩。

总体来说,使用压缩还是利大于弊的,不过需要合理地使用压缩,通过选择对一定范围大小的组件进行压缩和选择要压缩组件的类型,能使得收益最大化。




考虑代理缓存的情况

代理缓存服务器是一个中间层,位于客户端和服务器之间。使用代理缓存的情况下,浏览器将不直接与服务器通信,而是通过代理发送请求。这种情况下,压缩就要考虑额外的东西了。

首先,假设到达代理的是一个来自不支持gzip的浏览器的请求,代理会将请求转发到web服务器,此时web服务器的响应是未经过压缩的,这个响应会把代理服务器缓存起来并发给浏览器。现在,假设到达代理的第二个请求来自一个支持gzip浏览器,请求的是与之前相同的URL,代理会直接使用未经压缩的缓存响应,那么久失去了进行压缩的机会了。考虑更糟糕的情况,第一个请求来自支持gzip的浏览器,第二个请求来自不支持gzip的浏览器,这样第二个请求得到的缓存响应将无法被解码,导致出错。

解决这一问题的方法就是在Web服务器的响应中添加Vary头,Vary:Accept-Encoding,表示web服务器告诉缓存服务器分别为每一个Accpet-Encoding请求头缓存。在前面的例子中,代理通过识别Vary头,对响应缓存不同的版本,避免出错。


  作为信息时代象征的Internet的广泛使用是毋庸置疑的,作为Internet的终极用户,您可能经常有这种抱怨,我的机器够快的,但使用Internet时总觉得慢,作为ISP又抱怨用户不愿意掏钱买更好的线路,作为ICP又觉得没有太好的软件可以让数据的流量变小,这种受带宽限制的Internet着实让很多人伤心,何不制作一个数据压缩程序,将数据压缩一下,让他变得快些呢,Web Server和IE提供了部分这样的功能,也就是将网页的内容进行压缩,但这仅仅是部分功能。   对于象地理信息系统,图书查询系统,ERP系统等的,Internet要传输的数据量相当大,而象图形数据、XML数据、文本数据其压缩率是相当高的,甚至可以压缩到百分之几,正是由于这个要求,我制作了这么两个软件:一是传输流/文件的压缩软件,另一个是基于HTTP的压缩传输软件,这两个软件花费了我很多心血(尽管里面还有一些BUG),但我准备把他作为免费软件,来庆贺我的生日,如果你想使用或想得到源码请发邮件给我。   第一个软件,传输流/文件的压缩,利用Internet中惯常使用的gzip, deflate算法,可以和sun java的GZipInputStream和GZipOutputStream互操作   第二个软件,基于HTTP的压缩传输软件,可完全和IE的VBScript和JScript无缝融合   更详细信息请看使用文档Help.doc   例子文件包含这么几个: readme.doc 本文件 help.doc 帮助文档 GZCore.dll gzip,deflate压缩/解压程序,使用前必须注册 GZUtil.dll GZCore.dll的缓冲区处理封装,用于Web的流处理,使用前必须注册 GZip4Web.dll 基于Web压缩文件/流的传送,使用前必须注册 Test.zip 第一个产品的例子, C++代码工程 Temp.asp 第一个产品的例子, 直接用压缩程序发送GZip流 SvrRecv.asp 第二个产品的例子,用于服务端处理接受的压缩流 SvrSend.asp 第二个产品的例子,用于服务端处理发送的压缩流 default.asp 第二个产品的例子,用于客户端处理处理接受文件,GZip流   如果您有好的建议或BUG汇报,请邮件给我,我先表示感谢。   重要说明,此软件不允许使用于商业用途,否则会受到牵连。   另注,由于本软件使用带来的任何损失,软件制作者概不负责。    Ashley Wang ashleywang@21cn.com 2001.12.24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值