打开 gzip 后首屏反而慢了 200ms,webp 图片从 1.2MB 变成 1.3MB,CPU 使用率还涨了一截。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
gzip on; gzip_types text/css application/javascript application/json image/svg+xml; gzip_static on; nginx -s reload
gzip 对已经压缩过的格式几乎没有收益,压缩后的头信息还会让体积略增。gzip_types 写了 image 通配或全量类型就会把这些资源也送进压缩流程。这一点先确认清楚,后面就不用反复试。
「gzip 重复压缩」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
具体做法是,gzip_types 只保留 text 类 MIME 去掉 image 和 video;图片和字体用 gzip_static 提供预压缩文件 没有就原样返回;确认响应头里的 Content-Encoding 只出现在文本资源上;用 curl --compressed 对比压缩前后的 Content-Length。
改完照着核一遍,webp 响应不再带 Content-Encoding 文本资源的体积仍比未压缩小一半以上。
