Reducing Image File Size at Etsy

link esty 如何处理图片文件的

配置专门的服务器来处理上传图片,和专门的服务器来对请求图片做缓存.

一个缩小图片文件的简单办法就是降低quality, 但是不太好确定一个静态quality, 理想的情况是根据上传图片自动选择。可以认为85是一个平衡(基准,保守)的数值,quality的降低可以以这个作为bench.

SSIM (dssim) 可以通过比较两个图片的结构相似度,来估计从人类视觉角度来看,两个图片的差异度。这个数值的范围是0-inf. 如果我们认为quality=85是一个比较平衡的数值的话,那么我们可以通过二分办法来尝试多种quality, 一旦某个quality的SSIM和quality=85的SSIM的比例,高于某个范围的话,我们就可以认为这个quality是可行的。

原始的dssim只能用于比较png, cjpeg-dssim 可以用来比较jpeg. esty在此基础上进行了多种优化,把时间减半:

虽然后台会对图片保存多种尺寸,但是发现尺寸对于quality影响不大,所以在一个固定的尺寸上就可以很好地计算出quality,但是直接应用于其他尺寸上。


上线之后几个统计数据:

页面加载性能提升分析:

MIME Type Bytes
js 6,119,491
image 1,022,820
font 129,496
css 122,731
html 86,744
other 3,838
Total 7,485,120

其中js, css, font这些内容可以在整个站点被浏览的时候缓存下来,所以对于image在整个流量中占据非常大的部分。流量减少20-30%,可以让用户在2G网络下面(roughly 14.4 kbps)减少接近20s的加载时间。