Brotli压缩后JS文件反而变大,是配置问题还是服务器不支持?
我用Express配置了Brotli压缩,但发现压缩后的JS文件比Gzip版本还大,这是怎么回事?
我按照网上的教程在Node服务里这样写配置:
const compression = require('compression');
app.use(compression({
threshold: 0,
brotli: {
params: {
[zlib.constants.BROTLI_PARAM_QUALITY]: 11,
[zlib.constants.BROTLI_PARAM_LGWIN]: 22
}
}
}));
用在线压缩测试工具发现,原始文件12KB,Gzip后是5KB,但Brotli压缩后反而变成6KB。服务器是AWS EC2,Nginx代理到Node服务,可能哪里出问题了?
你现在看到的所谓“Brotli 压缩后变大”,大概率是没压缩或者被 fallback 成了别的格式,甚至可能是原始文件。真正的问题是你当前的方案压根没开启 Brotli。
要真想用 Brotli,有两个靠谱方案:
第一,换中间件。用
shrink-ray-current或者iltorb相关的中间件,比如:这玩意才真正支持 Brotli + Gzip 自动协商。
第二,如果你用了 Nginx,干脆把压缩交给它来做。Nginx 1.11+ 支持 Brotli,装好 ngx_brotli 模块后,在配置里加上:
然后 Node 层就别搞压缩了,让 Nginx 统一处理,反而更稳定高效。
你现在这种半吊子配置,不仅没启到作用,还可能因为错误参数导致输出异常,建议先检查响应头看 Content-Encoding 到底是什么,再决定走哪条路。
BROTLI_PARAM_LGWIN参数设置太大了,改小一点试试看。另外,Nginx也可能影响压缩效果,检查下Nginx的
gzip_types和gzip_vary配置是否正确。