我做了一段時間的 Angular 之後,聽到同事們處理 Github issue 時,偶爾會提到 Page Blink
這個名詞。
例如這個:
可以看出如果一個 Angular 應用缺乏 ngrx store,快取以及 SSR Transfer State 等機制,就容易出現 Page Blink 的問題。
以及我們在 Github 的程式碼倉庫裡收到其他開發者報的一個 issue:
這個問題在 3G 網路下尤其明顯:
Page blink 指的是在前端開發中,當頁面重新載入或導航到新的URL時,瀏覽器中的頁面會短暫地"閃爍"或"白屏"的現象。
這種現象的出現主要是因為瀏覽器在重新渲染頁面時需要重新載入 CSS、JavaScript和其他資原始檔,這個過程會導致頁面上的所有內容都被刪除,然後再重新繪製。當瀏覽器載入資源的時間很長時,頁面就會出現明顯的白屏或閃爍現象。
為了避免這種現象的出現,開發者們通常會採取一些最佳化策略,比如使用預載入、預渲染等技術,以儘可能減少重新載入資源所需的時間,並儘可能減少頁面的白屏時間。另外,一些框架和庫(如React、Vue等)也提供了一些最佳化機制,可以在頁面重新渲染時儘可能地減少閃爍和白屏現象的出現。?
Page flicker 則是另一個概念:Page flicker指的是在前端開發中,當頁面載入時,由於CSS樣式或JavaScript指令碼的載入順序等原因,頁面上的元素會在載入完成前閃爍或跳動的現象。
通常情況下,當瀏覽器開始載入頁面時,會先載入HTML內容,然後再載入CSS樣式和JavaScript指令碼等資源。如果CSS樣式或JavaScript指令碼的載入順序不正確,或者它們的載入時間過長,就可能導致頁面上的元素出現閃爍或跳動的現象。這種現象在使用者體驗上會產生一定的負面影響,降低使用者對網站的滿意度。
為了避免Page flicker現象的出現,開發者們通常會採取一些最佳化策略。比如,將CSS樣式表放在檔案頭部,將JavaScript指令碼放在檔案底部等等,這些策略可以最大限度地減少Page flicker的發生。
總之,Page flicker是前端開發中一個常見的問題,需要透過合理的最佳化策略來避免它的出現,從而提升使用者體驗。
Spartacus 曾經修復過的一個 Page Flicker 的問題: