為了最佳化我們公司網站的效能,我最近引入了瀏覽器預載入技術(Preload)。
這項技術可以顯著減少級聯情況,提高資源載入的並行度,從而加速網站的載入速度。
Preload的原理
Preload的原理是在瀏覽器解析HTML文件時,提前載入頁面所需的關鍵資源,如樣式表、指令碼檔案和字型等。
透過預載入這些關鍵資源,瀏覽器能夠在頁面載入時更快地獲取所需資源,從而加速頁面的渲染過程。下面是一個簡單的預載入示例程式碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Optimized Website with Preload</title> <!-- Preload CSS --> <link rel="preload" href="styles.css" as="style"> <!-- Preload JavaScript --> <link rel="preload" href="script.js" as="script"> <!-- Preload font --> <link rel="preload" href="font.woff2" as="font" type="font/woff2"> <!-- Normal CSS --> <link rel="stylesheet" href="styles.css"> </head> <body> <!-- Content of the webpage --> <!-- Normal JavaScript --> <script src="script.js"></script> </body> </html>
crossorigin屬性和as屬性的可選值
crossorigin屬性:該屬性用於指定資源的跨域設定。可選值包括:
- anonymous:表示資源會以匿名身份請求,不會包含憑據資訊(如 cookies、HTTP 認證等)。通常用於不需要使用者身份驗證的公共資源。
- use-credentials:表示資源會以憑據身份請求,瀏覽器會傳送包含憑據資訊的請求。適用於需要使用者身份驗證的私有資源。
as屬性:該屬性用於指定資源的型別。可選值包括:
- audio:音訊檔案
- document:HTML 文件
- font:字型檔案
- image:影像檔案
- script:JavaScript 檔案
- style:樣式表檔案
- video:影片檔案
- fetch:其他型別的網路請求
正確屬性的重要性
如果設定錯誤的crossorigin和as屬性,將導致預載入失效。
例如,如果預載入的資源是跨域的而沒有設定正確的crossorigin,瀏覽器可能會拒絕載入該資源。
同樣,如果as屬性設定錯誤,告訴瀏覽器預載入的資源型別與實際型別不符,也會導致預載入失效。
效果
下面是最佳化前後的對比,可以看到最佳化後的並行度提升了很多