本文章總結 https://github.com/thedaviddias/Front-End-Checklist
內部,非原創性內容。css
npx size-limit --why
查看佔用狀況(https://evilmartians.com/chronicles/size-limit-make-the-web-lighter),至關於 vue 提供的 report 選項。即將進行解析的域名進行獲取html
<link rel="dns-prefetch" href="https://example.com">
對於即將請求的服務提早進行 DNS 查找, TCP 握手和 TLS 協商前端
<link rel="preconnect" href="https://example.com">
<link rel="prefetch" href="image.png">
要在 body 中加載的進行提早加載vue
<link rel="preload" href="app.js">
本部分提取 https://medium.com/reloading/preload-prefetch-and-priorities-in-chrome-776165961bbf 的主要內容git
prefetch 和 preload 區別: preloading 是聲明未獲取,會強制瀏覽器發起請求進行加載,不會阻塞文檔的 onload 事件。 prefetch 則是告訴瀏覽器該資源可能用到,由瀏覽器決定什麼時候獲取。github
preload 可提高 10% 交互時間,web
preload 資源僅限於該資源加載的可能性很是高時,prefetch 用於未來可能被使用時。chrome
chrome 有四種策略: HTTP 緩存,內存緩存,service Worker 緩存,和Push 緩存。兩種資源最終均使用 HTTP 緩存瀏覽器
是否最終緩存取決於緩存策略。緩存
preload 使用 as 會和對應的類型加載優先級相同,不然會優先於 XHR。具體優先級可在 devtools 中添加priority 列。
圖片(在當前視圖中的)在加載過程當中是有相對比較高的優先級,因此最好對圖片實行懶加載。
使用 preload 或 prefetch ,可能會致使浪費帶寬,尤爲是沒有設置資源緩存的時候。
chrome 在使用 preload 加載腳本,但3秒內沒有使用它時會有警告。
最後要注意: 不要給全部資源添加 preload,只爲最近要加載的資源設置。
這個取決於你服務器有多少資源要加載和你用戶的帶寬以及其餘的一網絡情況。
極可能用到的請使用 preload,其餘重要的使用 prefetch。對於 script 來說,preLoad 關鍵的 bundle 比使用 <script async></script>
要好的多,同時你能夠 preload 圖片、樣式,字體、媒體等。須要本身明確你頁面中最早用到哪一個資源。
chrome 中,若是用戶從一個頁面中 prefetch 了一個資源,跳轉到新頁面時還會在 flight 狀態,請求不會結束。另外, prefetch 的資源不論是否設置了緩存,都會在 net-stack 中緩存至少 5 分鐘。
rel=preload
或者 preload 的header 有什麼區別?preload 是和 js 處理執行是解耦的,preload 標記會被 chrome 掃描,也就無論 preload 標籤在 HTML 什麼問題,都會被提早捕獲。這種實現比 js 實現更爲強大
使用 push 的狀況在於你知道確切的資源加載順序,有 service worker 來攔截可以被緩存的請求。preload 可以將開始下載的時間提早到最開始的 request,不論是否爲第三方資源。
這種要根據特性來, preload 在於和執行解耦,且有緩存策略,它的執行不會阻止執行其餘內容。
push 不能使用第三方,直接下發資源對於瀏覽器來說迴路更短,但它只在你明確知道你在作什麼的時候才能提升性能。
請求頭的方式:
Link: <https://example.com/other/styles.css>; rel=preload; as=style
區別在於:使用 headers 時可能會觸發 HTTP2。使用 tag 不會觸發 push.
const preloadSupported = () => { const link = document.createElement('link'); const relList = link.relList; if (!relList || !relList.supports) return false; return relList.supports('preload'); };
preLoad 是基於異步的載入,能夠在 onload 時設置
<link rel="preload" href="style.css" onload="this.rel=stylesheet">
用於加載 web 字體,異步加載 css,當前頁的 js 腳本加載
preload 支持 50%, prefetch 70%, 可參考 can i use
清理註釋,壓縮 HTML