我知道雅虎前端最佳化的35條軍規(實際上後來擴充套件到36條,也有人說是34條,核心內容相似)。我能說上幾條,並解釋其背後的原理:
-
減少 HTTP 請求: 這是最重要的一條。每次請求都會產生網路延遲,包括 DNS 查詢、建立連線、SSL 握手等。減少請求次數可以顯著提高頁面載入速度。合併CSS和JS檔案,使用CSS Sprites,內聯圖片(Data URI)等都是減少HTTP請求的有效方法。
-
使用內容分發網路 (CDN): CDN 將靜態資源快取到全球各地的伺服器上,使用者可以從離他們最近的伺服器獲取資源,從而減少延遲。
-
新增 Expires 頭: 透過設定 Expires 頭,告訴瀏覽器可以將靜態資源快取到本地,避免重複下載。Cache-Control: max-age 也是類似的機制,更推薦使用這種方式。
-
壓縮元件: 使用 Gzip 壓縮 HTML、CSS、JavaScript 等文字資源,可以顯著減少檔案大小,從而加快下載速度。
-
將樣式表放在頂部: 將 CSS 放在
<head>
中,可以使頁面逐步渲染,避免出現“白屏”現象。 -
將指令碼放在底部: JavaScript 會阻塞頁面渲染,因此應將指令碼放在
<body>
的底部,或者使用defer
或async
屬性,避免阻塞頁面載入。 -
避免 CSS 表示式: CSS 表示式會降低渲染效能,應該儘量避免使用。
-
使用外部 JavaScript 和 CSS: 外部檔案可以被瀏覽器快取,從而減少後續頁面載入時間。
-
減少 DNS 查詢: 減少域名可以減少 DNS 查詢次數,從而提高頁面載入速度。
-
精簡 JavaScript: 移除不必要的空格、註釋等,可以減小檔案大小,提高下載速度。可以使用工具例如UglifyJS或Terser來完成。
-
避免重定向: 重定向會增加一次額外的 HTTP 請求,應該儘量避免。
-
移除重複指令碼: 重複的指令碼會增加下載時間和解析時間,應該確保頁面中沒有重複的指令碼。
-
配置 ETag: ETag (Entity Tag) 是一個資源的唯一識別符號。瀏覽器可以使用 ETag 來判斷資源是否已快取,避免重複下載。
這只是其中一部分,還有其他最佳化策略,例如避免 404 錯誤,使用 GET 請求 Ajax,減少 DOM 元素數量,避免使用 iframe 等。 需要根據具體情況選擇合適的最佳化策略。 現在的前端最佳化手段也在不斷髮展,有些規則的優先順序有所變化,但其核心思想仍然適用。