很多快取外掛都有一個叫「移除未使用 CSS」的選項。打開之後,它會掃過頁面,把沒有任何元素用到的選擇器整批刪掉,再送一份瘦過身的樣式表給瀏覽器。

大部分時候這很好用。問題出在它是靜態判斷的。

它看不懂的三種寫法

第一種,頁面建構器在後台加上的 class。編輯畫面裡那個「額外 class」欄位填進去的名字,掃描器在樣板裡找不到出處,就當成沒人在用。

第二種,只宣告在 :root 上的設計 token。變數先定義好、準備之後才用,現在還沒有人引用。在掃描器眼裡,這就是死碼。

第三種,由腳本在執行期間才掛上去的 class。掃描早就做完了。

為什麼很難認出來

我們手上能拿到的證據,每一個都說沒問題。

伺服器上的檔案有那段宣告。合併後的那一份也搜得到。開發者工具裡,檔案載入成功,狀態碼 200。

後來我們發現會說實話的只有 getComputedStyle(),它回報的是瀏覽器最後真的用了哪個值。前兩次全綠,都是因為拿「伺服器上的檔案有這段」當證據。現在驗收一律查它。

我們的做法

會被刪掉的那一類宣告,改由外掛用行內樣式注入。行內樣式不會經過那道移除流程。

在 WordPress 裡,樣式表之間可以設定相依,保證 A 在 B 之後載入。我們以前以為設了相依就安心了。它保證的是順序,沒有保證東西一定會被載入。