前言
之前在公司裡面做一些效能上的調整時,無意間發現了一個奇怪的現象,繼續往下追查之後才發現是個好像沒有被什麼人發現過的 bug,而且成因我覺得挺有趣的,就想說可以寫一篇跟大家分享一下。
這篇技術含量不高,可以抱持著看故事的心態來看這篇,會比較有趣一點。
故事的開端
故事的起源呢,是之前在公司裡面要做一些網站上的調整,試著增進一下載入的速度。當我們談到性能最佳化這一塊,其實有很多可以做的,例如說跟 Server 那邊比較有關的是:
- 使用 HTTP/2
- 使用 gzip 或是 brotli 進行壓縮
- 使用 Cache(可以加快 revisit 的速度)
- 使用 CDN
- 降低 TTFB 時間
不過以上都需要後端或是 SRE 的協助,跟前端其實關係不大。跟前端關係比較大的,也可以分成很多面向來看,例如說以「減少資源」的角度來看,可以做的事情有:
- Image 格式調整(壓縮 + webp 或其他格式)
- JS 大小(ugligy、code spliting、dynamic import)
- CSS 大小(minify、移除不需要的 CSS)
如果以「加速載入重要資源」的角度,可以加上 preload 或是 preconnect 這些 hint,來提示瀏覽器哪些東西應該先被載入。
還可以從「減少 JS 執行時間」的角度來看,例如說如果是寫 React,可以用 shouldComponentUpdate、PureComponent 或是 memo 來減少不必要的 re-render。
這一篇既然標題都寫 styled components 了,主題當然就是圍繞在 CSS 這一塊。