浏览器压缩技术
作为一个前端优化来说压缩技术不可少,但是各个浏览器支持情况却又是不同。
浏览器支持的压缩编码分析
作为主流的PC浏览器来说主要是IE、Chrome、Firefox、Opera、Safari这几个,同时移动端的Chrome、Firefox、Opera、QQ、UC等,这么多的浏览器,它的压缩编码支持情况是怎么样的?(浏览器端主要是针对编码的解码)
解码类型 | IE | Chrome | Firefox | Opera | Safari | UC | |
---|---|---|---|---|---|---|---|
gzip | √ | √ | √ | √ | √ | √ | √ |
deflate | √ | √ | √ | √ | √ | √ | √ |
sdch | x | √ | x | √ | √ | x | x |
lzma | x | x | x | √ | x | x | x |
gzip 和 deflate
gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分;
deflate是一种压缩算法,是huffman编码的一种加强。
deflate与gzip解压的代码几乎相同,可以合成一块代码。
区别仅有:
deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。
Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0x78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0x7801,python zlib.compress()结果头部为0x789c。
lzma
是2001年以来得到发展的一个数据压缩算法,它用于7-Zip归档工具中的7z格式。它使用类似于LZ77的字典编码机制,在一般的情况下压缩率比bzip2为高,用于压缩的字典文件大小可达4GB。
sdch
sdch是Shared Dictionary Compression over HTTP的缩写,即通过字典压缩算法对各个页面中相同的内容进行压缩,减少相同的内容的传输。如:一个网站中一般都是共同的头部和尾部,甚至一些侧边栏也是共同的。之前的方式每个页面打开的时候这些共同的信息都要重新加载,但使用SDCH压缩方式的话,那些共同的内容只用传输一次就可以了。
sdch主要分为3个部分:首次请求,下载字典,之后的请求。
这种方式最开始的时候是Google工具栏里为IE准备的,目前Chrome已经完全支持了,不过暂时还没发现哪个网站在使用。
最佳实践
为了兼顾主流浏览器做好使用gzip 和 deflate压缩。
参考文档
- 无