Nginx压缩JS文件需同时满足:MIME类型为application/javascript或text/javascript且在gzip_types中声明、原始大小≥gzip_min_length(默认2048字节)、请求头含Accept-Encoding: gzip。

核心就两件事:把 JS 文件“压小”,再让浏览器尽量少下载。
只对适合的文件启用压缩
JavaScript 是纯文本,天然适合 Gzip 或 Brotli 压缩;而图片、字体、视频等二进制资源本身已高度压缩,再套一层压缩不仅无效,还会白耗 CPU。Nginx 配置中必须明确限定压缩类型:
- 必压:application/javascript、text/css、application/json、text/xml
- 禁压:.jpg、.png、.webp、.woff2、.mp4 等所有二进制后缀
- 不建议压极小文件:设 gzip_min_length 1024(1KB),跳过几十字节的空响应或内联脚本片段
优先用 Brotli,Gzip 作兜底
现代浏览器(Chrome 52+、Firefox 44+、Safari 16.4+)都支持 Brotli,压缩率比 Gzip 高约 20%。实际部署时不是二选一,而是双开并依赖标准协商机制:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 开启 brotli on 和 gzip on,不手动判断 UA
- 配置 brotli_static on,提前用
brotli --quality=9 -o main.js.br main.js生成 .br 文件,Nginx 直接返回,省去运行时压缩开销 - 当请求头
Accept-Encoding: br,gzip时,Nginx 自动优先返回 .br 文件;不支持 Brotli 的旧设备自然回落到 Gzip
调好压缩级别和阈值
高压缩级 ≠ 更优效果。实测表明:
立即学习“Java免费学习笔记(深入)”;
- Gzip 推荐 level 6:压缩率约 65%,CPU 占用增幅可控(15%–20%)
- Brotli 推荐 level 7–9:level 7 已超越 Gzip level 9,level 11 虽略高但耗时陡增,得不偿失
- 避免 CDN 和源站重复压缩:若 Nginx 已返回
Content-Encoding: br,CDN 层应关闭自身压缩,否则可能出错或浪费资源
配合缓存策略放大收益
压缩解决的是“单次传多少”,缓存解决的是“要不要再传”。JS 文件通常长期不变,二者叠加效果显著:
- 用文件名哈希(如
app.a1b2c3.js)保证内容变则 URL 变,再配 expires 30d 或 Cache-Control: public, max-age=2592000 - 启用 open_file_cache 和 sendfile on,减少磁盘 I/O 和内核态拷贝开销
- 二次访问时,浏览器直接读本地缓存,连网络请求都不发——压缩带来的带宽节省,此时就变成零传输


















