前言
關于前端css性能優化,網上很多類似文章,我之前也寫過,《 網站前端性能優化之javascript和css 》,感興趣的可以去看下。今天我們舊事重提,再來談談css的加載,及加載順序。
通常的css加載順序
一般情況下,我們css樣式表是放在頭部,同時為了減少請求,我們通常對css進行一個合并壓縮。 目前我們css一般是如下加載的:
| <head> <link rel="stylesheet" href="/all-of-my-styles.css"></head><body> …content…</body> | 
這樣可以,但是有幾個性能問題,我們可以繼續優化:
問題:
所有的css都合并壓縮成一個文件,放在頁面頭部加載。可能首屏我們僅僅用到一點點css,卻在頭部加載了所有的css,造成資源的不合理加載和浪費。假如css很大,嚴重影響網頁加載速度和首屏顯示速度。
換個思路
假如不合并,單個css壓縮引用,文件大小是小了,但是請求數量多了一些。 權衡二者,并且進行性能測試對比,發現如下寫法確實比我們所有css放在頭部一次性加載,首屏顯示速度要快些:
| <head></head><body> <!-- HTTP/2 push this resource, or inline it, whichever's faster --> <link rel="stylesheet" href="/site-header.css"> <header>…</header> <link rel="stylesheet" href="/article.css"> <main>…</main> <link rel="stylesheet" href="/comment.css"> <section class="comments">…</section> <link rel="stylesheet" href="/about-me.css"> <section class="about-me">…</section> <link rel="stylesheet" href="/site-footer.css"> <footer>…</footer></body> | 
但是還是有性能可以優化的地方!
例如:
我們首屏僅僅顯示了頭部和文章,其他模塊首屏不顯示。那么,其他模塊的css我們可以完全異步來加載。如何異步加載呢?
請看下面
loadCSS 及 Preload
關于preload,推進2篇文章給大家看下:
1、通過rel="preload"進行內容預加載: https://developer.mozilla.org/zh-CN/docs/Web/HTML/Preloading_content
2、preload 的w3文檔: https://www.w3.org/TR/preload/
對于一些不是首屏加載的css,我們可以如下寫法:
| <link rel="preload" href="path/to/haorooms.css" as="style" onload="this.rel='stylesheet'"> | 
防止瀏覽器禁止js,保險起見,也可以如下:
| <link rel="preload" href="path/to/haorooms.css" as="style" onload="this.rel='stylesheet'"><noscript><link rel="stylesheet" href="path/to/haorooms.css"></noscript> |