看了一个关于网站压缩的google视频讲座,总结下。
讲座地址:GZIP is not enough! (YouTube..需翻墙)
PPT:PPT
虽然一个网站占主要大小的是图片,但HTML,JS,CSS的大小也是在不断增加的,所以文本相关的压缩是十分重要的。
推广了一下google的图片格式webp,既可以想PNG一样透明,也可以像JPEG一样有损压缩,甚至可以像GIF一样包含动画。
随着各种新技术的诞生,一些JS的体积十分巨大,压缩是必不可少的。
讲了讲Minification和Compression的区别,前者仅仅是通过减少可读性来缩小体积,而后者则是重新编码。
GZIP原理:LZ77(字典编码的一种)+HUFFMAN(哈夫曼编码)
几种压缩算法:GZIP,LZMA,LPAQ,BZIP2互有优劣,但是后面讲了因为整个互联网上可以说只有GZIP是普及了,使用其他压缩算法可能会带来问题。
进行预处理,如[0,1,2,3,4,5,6,7,8,9]用GZIP进行压缩体积不会缩小甚至会变大,但是进行delta编码成[0,1,1,1,1,1,1,1,1]转换成差值,重复元素就会很多,压缩也就会很有效率。
GZIP会使一些小文件膨胀。
PNG的压缩算法和GZIP是一个原理,图片的细微差距会导致压缩体积的巨大区别。
可以自己使用7ZIP或Zopfli进行压缩而不是让系统自己压缩,会有大约10%+的优势。
网站经常使用JSON来传输数据,通过变换JSON(Transpose JSON)进而缩小体积,例如:
{ “name”: “alex”, “pos”: “AUS”, }, { “name”: “Colt”, “pos”: “USA”, }
转换成:
{ “name”: [“alex”, “colt”], “pos”: [“AUS”, “USA”], }
不光本身体积小了,也有利于压缩。
通过Dense Codes算法预处理来优化压缩(Compression boosting)。测试结果Dense Codes+7-Zip效果最好
使用Delta.js来传输文件新旧版本之间的的差值(Delta compression)。
文件间的水平差值,例如需要传输三个文件file1,file2,file3可以传输fil1,file2-file1,file3-file2。
最后结尾:
GZIP is not enough
It’s up to you to control your data
个人一句话总结:基本来说没有万能方法,挨个试一遍选最小的方案吧。。。