【譯】前端效能優化清單

abcdGJJ發表於2018-09-17

本文翻譯自thedaviddias總結的Front-End-Performance-Checklist

HTML

  • 刪除不需要的註釋: 確保註釋從頁面中移除。

    原因:

    註釋對使用者並沒有用,應該從生產檔案中刪除。一種需要保留註釋的情景是你引用別人庫的原始檔案。

    做法:

    大多數時候,註釋會被HTML壓縮外掛移除。

  • 刪除不需要的屬性: 型別屬性比如type="text/javascript"或者type="text/css"不再是必須的,應當被移除。

    <!-- Before HTML5 -->
    <script type="text/javascript">
        // JavaScript code
    </script>
    
    <!-- Today -->
    <script>
        // JavaScript code
    </script>
    複製程式碼

    原因:

    因為HTML5中將text/css和text/javascript作為預設的屬性值,所以不再需要寫型別屬性。

    做法:

    ⁃ 確保你的<link><script>標籤沒有任何的type屬性。

  • 總是將CSS標籤放在JavaScript前面: 確保CSS總是在JavaScript程式碼前載入。

    <!-- Not recommended -->
    <script src="jquery.js"></script>
    <script src="foo.js"></script>
    <link rel="stylesheet" href="foo.css"/>
    
    <!-- Recommended -->
    <link rel="stylesheet" href="foo.css"/>
    <script src="jquery.js"></script>
    <script src="foo.js"></script>
    複製程式碼

    原因:

    在JavaScript前引用CSS可以實現更好的並行下載,從而加快瀏覽器呈現時間

    做法:

    ⁃ 確保<head>中的<link><style>總是在<script>前。

  • 減少iframes的數量: 只有在任何其他技術實現不了的情況下才使用iframes。儘可能避免使用iframes。

CSS

  • 壓縮: 生產環境上的CSS檔案應該是壓縮的,註釋、空格、新行需要被移除。

    原因:

    當CSS檔案壓縮過後,內容會載入的更快,傳送給客戶端的資料也將減少。在生產環境中壓縮CSS檔案很重要。這對使用者和希望降低頻寬成本和資源使用量的企業都很有利。

    做法:

    ⁃ 在構建或部署之前或期間,使用工具自動壓縮檔案。

  • 合併檔案: 將CSS檔案寫在一個檔案中(並不總對HTTP/2有效)。

    <!-- Not recommended -->
    <link rel="stylesheet" href="foo.css"/>
    <link rel="stylesheet" href="bar.css"/>
    
    <!-- Recommended -->
    <link rel="stylesheet" href="foobar.css"/>
    複製程式碼

    原因:

    如果你仍在使用HTTP/1,你可能還需要合併檔案。如果你的伺服器使用HTTP/2 (還在進行測試),情況就不太一樣了。

    做法:

    ⁃ 在構建或部署之前或期間,使用線上工具或任何外掛將CSS合併起來。 ⁃ 當然,確保合併不會破壞你的專案。

  • 非阻塞: CSS檔案需要非阻塞引入,阻止DOM載入時間過長。

    <link rel="preload" href="global.min.css" as="style" onload="this.rel='stylesheet'">
    <noscript>
        <link rel="stylesheet" href="global.min.css">
    </noscript>
    複製程式碼

    原因:

    CSS檔案會阻止頁面載入並延遲頁面的呈現。使用preload可以在瀏覽器開始顯示頁面內容之前就載入CSS檔案。

    做法:

    ⁃ 你需要在link標籤中新增rel屬性值為preload以及as="style"

  • CSS類名長度: 類名的長度可能會對HTML和CSS檔案產生(輕微)影響。

    原因:

    對於你的專案採用何種命名策略將會對樣式表的可維護性產生重大影響,甚至效能影響。不過它也是有爭議的。如果你使用的是BEM命名方式,在某些情況下可能會遇到命名的長度字元多餘實際所需的類名。因此,明智的選擇CSS類名和名稱空間是很重要的。

    做法:

    對一些人來說,設定最大的類長度可能很有趣,但是需要確保分解成元件的網站可以減少類(和宣告)的數量和長度。

  • 沒有用到的CSS: 移除沒有用到的CSS選擇器。

    原因:

    刪除未使用的CSS選擇器可以減少檔案大小,加快資源的載入速度。

    做法:

    ⁃ 始終檢查你使用的CSS框架是否已經包含了重置/normalize的程式碼。有時你可能不需要重置/normalize檔案中的所有內容。

  • 關鍵CSS: 關鍵CSS包括了用來渲染頁面可見部分的樣式。它嵌入在你的主CSS呼叫之前,位於<style></style>之間,排成一行(如果可以的話進行壓縮)。

    原因:

    內聯關鍵的CSS樣式能夠幫助加快頁面的渲染並且減少伺服器請求數量。

    做法:

    使用線上工具或使用類似Addy Osmani開發的外掛生成關鍵CSS。

  • 嵌入或行內CSS: 避免在body中使用嵌入或者行內CSS。(http/2可以忽略)

    原因:

    將內容與樣式分開是一個很好的做法,它使得程式碼更易於維護,並且保持站點的可訪問性,這是原因之一。但是對於效能而言,它減少了HTML頁面的檔案大小和載入時間,這是第二個原因。

    做法:

    總是使用外部樣式表或者將CSS內嵌在<head>中(並遵循其他的CSS效能優化規則)

  • 分析樣式表: 分析樣式表可以幫助你標記有問題、冗餘和重複的CSS選擇器。

    原因:

    有時你的CSS檔案中可能有冗餘或驗證錯誤,分析你的CSS檔案並消除這些問題可以幫助你加快CSS檔案的速度(因為你的瀏覽器會更快地閱讀它們)

    做法:

    你的CSS應該是有條理的,使用CSS前處理器可以幫助你做到這一點。下面列出的一些線上工具也可以幫助你分析和更正程式碼。

Fonts

Image

JavaScript

Server

JS-Frameworks

Angular

React

Vue

CMS-Frameworks

WordPress

文章

外掛推薦

相關文章