传輸压缩是站点运营里成本最低的優化之一:服務器開一個開關,HTML、CSS、JS 的体积通常能降一半以上,訪客加载更快,蜘蛛抓取同样的頁面也能省下带宽和時間。但現實中经常出現两種情况,一是根本没開,二是看起来開了却没生效,或者压错了對象。這篇就把自查的步骤和常见坑捋一遍。
先確認压缩到底有没有生效
不要只在服務器配置文件里看到 gzip on 就放心。用 curl 检查最直接:带上 Accept-Encoding 請求头,看返回头里有没有 content-encoding: gzip 或 br。浏览器開發者工具的 Network 面板同样能看到每條請求的响應头,注意對比“资源大小”和“传輸大小”两列,後者才是真正跑在網线上的資料量。
如果某個 CSS 文件资源大小 300KB,传輸大小也是 300KB,基本可以判断压缩没起效,或者响應头被中間层丢掉了。反過来,如果传輸大小只有几十 KB,說明压缩在正常工作。
哪些類型值得压,哪些別碰
- 值得压:HTML、CSS、JavaScript、JSON、XML、SVG、纯文本。這些是文本,压缩比通常很高。
- 不要压:JPEG、PNG、WebP、GIF、MP4、MP3、WOFF2 等本身已压缩過的格式。再压一遍几乎不會變小,反而浪費 CPU。
- 谨慎處理:字体文件、已经是 gzip 或 zip 的归档包。重复压缩有时体积還會微增。
gzip 和 Brotli 的關系
Brotli 在文本類资源上通常比 gzip 再小一成到两成,現代浏览器普遍支持。常见做法是優先返回 br,客戶端不支持时回退 gzip。開啟前先確認服務器或 CDN 是否支持,避免為了新格式把老訪問者挡在门外。
如果是静態预压缩,源文件更新後记得重新生成 .br 和 .gz 文件,否則客戶端拿到的還是舊版本内容。這一点和缓存刷新是同一個道理,很容易被忽略。
容易踩的几個坑
- 只压了首頁:检查的是首頁,静態资源却走 CDN 或另一台机器,那邊没開。要按域名、按目錄逐個確認。
- 双压缩:源站和 CDN 都開了動態压缩,文件被压了两层。一般让其中一层负责即可。
- 压缩了小文件:1KB 以下的响應压缩後可能更大,還多耗资源,可以按大小阈值跳過。
- 動態压缩压垮 CPU:高並發下每次請求都現压,CPU 會明顯上升。静態资源建议预压缩,動態頁面配合缓存使用。
- 誤压二進制文件:下载包、图片、视频被压缩後,客戶端解出来可能打不開,要按 MIME 類型设白名單。
一份可执行的自查清單
- 用 curl 或浏览器網絡面板確認 HTML、CSS、JS 都带 content-encoding。
- 對比压缩前後的传輸大小,確認压缩比在合理范围。
- 確認图片、视频、字体等已排除在压缩名單之外。
- 確認 CDN 與源站没有重复压缩。
- 確認预压缩文件與源文件版本一致。
- 观察 CPU 占用與响應時間,確認動態压缩没有带来明顯负担。
压缩是省带宽、省時間的手段,不是排名手段。压好了不會自動带来排名,压坏了却可能让頁面變慢或下载损坏。
传輸压缩不是配一次就永遠不用管的項目。換服務器、上 CDN、改配置、調缓存策略,每一個動作都可能让压缩悄悄失效。把它放進上线检查表,配合抓取日誌和性能資料一起看,問题通常能早一步發現。