首先現階段來看各家瀏覽器對 Brotli 的支援: https://caniuse.com/brotli
IE, Opera mini, Baidu 瀏覽器還不支援 Brotli, 其他都已支援了, 但你也有可能遇到早期版本不支援的瀏覽器
這裡就看你對瀏覽器支援程度與使用 Google Cloud Platform Cloud CDN 費用上的權衡, 舉個例子好了, 我用 JQuery 3.6.0 縮小版這個 JavaScript 檔案放到 Cloud CDN 來輸出
JQuery 3.6.0 min | 無壓縮 | gzip | Brotli |
檔案大小(Bytes) | 89,501 | 30,841 | 27,938 |
可以看到 gzip 過後, 檔案大小只剩 1/3, 對於 CDN 輸出費用減少很有幫助, 而 Brotli 還能更小!
準備 Brotli 工具程式壓縮檔案
brotli --input jquery-3_6_0-min.js --output jquery-3_6_0-min-br.js
這裡輸出新檔案以便比較
將檔案複製到 Coud Storage
gsutil cp jquery-3_6_0-min-br.js gs://mystotage/js/
設定物件的中繼資料, 加入 Content-Encoding:br Header
gsutil setmeta -h "Content-Encoding:br" gs://mystorage/js/jquery-3_6_0-min-br.js
接著用瀏覽器讀取這個JavaScript檔案, 我使用 Chrome 89, 用開發人員工具檢視 Request Header
accept-encoding: gzip, deflate, br
這裡代表瀏覽器接受的壓縮格式有 gzip, deflate, br
看 Response Header
content-encoding: br
content-length: 27938
正確的回應 br (Brolti) 壓縮格式
當然 jquery-3_6_0-min-br.js 也正確的解壓顯示在瀏覽器裡, 如果 Cloud Storage 裡沒設定"Content-Encoding:br", CDN 輸出會是亂碼, 麻煩的是 gsutil 工具傳輸過程只能指定壓縮文字檔成 gzip 格式, 不支援 Brotli, 得自己額外先做再傳輸到 Cloud Storage, 而 Cloud CDN 功能也少, 不像 AWS CloudFront 已經可以支援 Brotli 壓縮, 怪了 Brotli 不是你 Google 在推的東西嗎??