CSS-in-JS 的成本是渲染期產生樣式與注入規則

runtime CSS-in-JS(例如 styled-components)在渲染期做兩件事:

  1. 產生樣式字串。
  2. 把 CSS 規則注入 document。

這兩件事都落在主執行緒上,和 React 的渲染搶同一份時間。把樣式生成移到建置期就能把這段工作整個拿掉。

Linear 的量測

指標結果
view-heavy 頁面的主執行緒 CPU 工作減少約 20%–35%
中階機器上的體感約快 30%
一次導覽注入的 CSS 規則數數百條 → 0 條

三個數字量的不是同一件事,引用時要帶範圍;作者自己也先聲明端到端影響難以歸因,因為它和其他效能優化交織在一起。

什麼時候才值得換

Linear 的最後一根稻草不是數字,是維護狀態:升級 React 18(concurrent rendering)後出現效能退化,而 styled-components 已進入維護模式。

相關:能在建置期算完,代表樣式不依賴執行期的任意值、樣式契約要用工具強制,逃生門要明示且有 scope