[web] 內容 Image 預先或延遲載入(preload, lazy load, prefetch)
keywords: preload
, prefetch
, render-blocking
, lazy-load
🔖 The Complete Guide to Lazy Loading Images @ CSS Tricks 🔖 Lazy Loading Images and Video @ Google Developers > Web Fundamentals > Performance
當請求一個資源的時候,如果該資源存取完畢前無法觸發 window.onload
的事件,就稱作是 render-blocking
。
Preload
使用 rel="preload"
透過在 <link>
中使用 rel="preload"
可以在此頁(current page)預先載入(preload)稍後需要使用的資源,讓它們在稍後瀏覽器進行頁面轉譯的時候可以立即被使用,預先載入特別適合用在載入 CSS 字體檔、圖片或是較大的影音檔案。
要注意的是,透過 preload
只會提前去請求該資源,然後存在記憶體中,在你需要的時候自己再去使用(只限同一頁面)。
<head>
<meta charset="utf-8" />
<title>JS and CSS preload example</title>
<!--★★★★★ -->
<link rel="preload" href="style.css" as="style" />
<!-- stylesheet -->
<link rel="preload" href="main.js" as="script" />
<!-- script -->
<link rel="preload" href="main.js" as="image" />
<!-- image -->
<!-- MIME Type -->
<link rel="preload" href="intel-short.mp4" as="video" type="video/mp4" />
<!-- mp4 -->
<link rel="preload" href="fonts/foo.woff" as="font" type="font/woff" crossorigin="anonymous" />
<!-- woff font -->
<link
rel="preload"
href="fonts/roboto-webfont.ttf"
as="font"
type="font/ttf"
crossorigin="anonymous"
/>
<!-- ttf font -->
<link
rel="preload"
href="fonts/roboto-webfont.svg"
as="font"
type="image/svg+xml"
crossorigin="anonymous"
/>
<!-- svg font -->
<!-- media query preload -->
<link rel="preload" href="bg-image-narrow.png" as="image" media="(max-width: 600px)" />
<link rel="preload" href="bg-image-wide.png" as="image" media="(min-width: 601px)" />
<!-- preload 只是做預先下載的動作,還是自己使用它才有效 -->
<link rel="stylesheet" href="style.css" />
</head>
❗ preload 只是做預先下載的動作,還是要在需要的地方使用它。
預先載入 script 後使用
// <link rel="preload" href="my-script.js" as="script">
var preloadLink = document.createElement('link');
preloadLink.href = 'my-script.js';
preloadLink.rel = 'preload';
preloadLink.as = 'script';
document.head.appendChild(preloadLink);