web前端入門到實戰:非同步載入CSS最簡單的實現方式
我們想
提高
網頁效能的最有影響力的措施之一,就是以不延遲網頁渲染的方式載入
CSS
。
在預設情況下,瀏覽器在載入
CSS
時將終止頁面的樣式呈現(同步載入),也就是載入
CSS
會阻塞
DOM樹
的渲染(但並不會阻塞
DOM樹
的構建),可以簡單理解為:當在載入
CSS
的同時,也在構建
DOM樹
,只是沒有應用上樣式。
渲染流程
簡單過一遍瀏覽器渲染的流程:
- 載入
HTML
資源 - 解析
HTML
- 載入
CSS
資源,同時構建DOM樹
- 解析
CSS
,同時渲染DOM樹
當
CSS檔案
過大,就會停留在
第3步
,所以網速慢時,開啟網站的時候經常遇到沒有樣式的情況。
所以我們需要先載入部分
CSS
(
首屏
需要用到的
CSS
),其他優先順序比較低的
CSS
就以非同步的方式載入。與
script
元素不同,沒有
async
或
defer
屬性可以簡單地應用於
link
元素,但是可以模擬。
非同步載入
1. 利用媒體查詢
設定一個當前瀏覽器不支援的值:
<link rel="stylesheet" href="./index.css" media="none" >
這樣瀏覽器將會非同步載入這個
CSS
檔案(優先度比較低),在載入完畢之後,使用
onload
屬性將
link
的媒體型別設定為
all
,然後便開始渲染。
如果有如下程式碼:
<link rel="stylesheet" href="./index2.css" media="none" onload="this.media='all'"> <link rel="stylesheet" href="./index1.css"> web前端開發學習Q-q-u-n:784783012 ,分享學習的方法和需要注意的小細節,不停更新最新的教程和學習方法(詳細的前端專案實戰教學影片)
瀏覽器載入優先順序如下:
又或者有如下程式碼:
<link rel="stylesheet" href="./index1.css" media="screen and (max-width: 800px)"> <link rel="stylesheet" href="./index2.css" media="screen and (min-width: 800px)">
重新整理頁面時,如果
視窗
寬度小於
800px
,那麼優先載入
index1.css
,如果大於
800px
,則相反:
總結:媒體查詢不匹配的樣式優先順序低?。
2. 提前載入資源
這個跟上述類似,但是優先順序是
最高
的,不過還是非同步載入,不會阻塞DOM的渲染,只是瀏覽器支援度比較低?。
<link rel="preload" href="./index.css" as="style">
告訴瀏覽器
"請提前載入好此資源,我後面會用到!"
。當用到的時候,瀏覽器便從快取中拿取?。
所以正確操作跟媒體查詢一樣:
<link rel="preload" href="./index.css" as="style" >
當然,該屬性還可以應用於其他資源,當你需要用到這些資源的時候,瀏覽器會直接從
快取
中拿,不再次傳送請求了。
<link rel="preload" href="./index.js" as="script"> <link rel="preload" href="./index.png" as="image"> <link rel="preload" href="./index.mp4" as="video" type="video/mp4">
3. 撈仔寫法
let link = document.createElement("link"); link.rel = "stylesheet"; link.href = "./index1.css"; document.head.appendChild(link); web前端開發學習Q-q-u-n:784783012 ,分享學習的方法和需要注意的小細節,不停更新最新的教程和學習方法(詳細的前端專案實戰教學影片)
總結
重要樣式使用同步載入(常規寫法),優先順序低的則使用非同步載入,非同步載入不會阻塞頁面的渲染。
越來越多的人發現,可能只需要簡單的
HTML
方法,而簡單往往是最好的。
<link rel="stylesheet" href="./main.css"> <link rel="stylesheet" href="./other.css" media="none" onload="this.media='all'">
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901074/viewspace-2662435/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- web前端入門到實戰:簡單的圖片輪播Web前端
- web前端入門到實戰:css3 實現大轉盤Web前端CSSS3
- web前端入門到實戰:css騷操作之表單驗證Web前端CSS
- 前端開發入門到實戰:六種組織CSS的方式前端CSS
- web前端入門到實戰:css滑鼠經過彈出子選單特效Web前端CSS特效
- web前端入門到實戰:Js代理模式Web前端JS模式
- web前端入門到實戰:H5-canvas實現粒子時鐘Web前端H5Canvas
- web前端入門到實戰:好用的Js圖表庫Web前端JS
- web前端入門到實戰:JS中new操作符原始碼實現Web前端JS原始碼
- web前端入門到實戰:30行前端程式碼實現任意文字轉粒子Web前端
- web前端入門到實戰:CSS 層疊上下文(Stacking Context)Web前端CSSContext
- web前端入門到實戰:HTML元素巢狀問題Web前端HTML巢狀
- 前端開發入門到實戰:css實現div垂直水平居中的2種常用方法前端CSS
- web前端入門到實戰:你真的瞭解CSS繼承嗎?看完必跪Web前端CSS繼承
- web前端入門到實戰:css3迴圈,模擬拼多多動畫效果Web前端CSSS3動畫
- 原生JS實現最簡單的圖片懶載入JS
- 原生 JS 實現最簡單的圖片懶載入JS
- web前端入門到實戰:擼兩個天氣小程式Web前端
- web前端入門到實戰:常用網頁元素命名規範Web前端網頁
- Js使用水桶簡單方便實現同步載入JS
- CSS並不簡單--結合SVG實現簡單的載入動畫CSSSVG動畫
- 前端開發入門到實戰:css實現修改瀏覽器自動填充表單的預設樣式前端CSS瀏覽器
- Flutter For Web入門實戰FlutterWeb
- 前端開發入門到實戰:css單行截斷和多行截斷問題前端CSS
- web前端入門到實戰:用css3實現驚豔面試官的背景即背景動畫(高階附原始碼)Web前端CSSS3面試動畫原始碼
- web前端入門到實戰:js擷取字串相關的知識點Web前端JS字串
- javascript 非同步模組載入 簡易實現JavaScript非同步
- 前端開發入門到實戰:CSS自定義屬性+CSS Grid網格實現超級的佈局能力前端CSS
- iOS 實現簡單的列表預載入iOS
- js實現的動態載入css檔案簡單介紹JSCSS
- Nginx入門到實戰(2)場景實現篇Nginx
- Locust 從入門到實戰
- Linux入門到實戰Linux
- Gin + GORM 入門到實戰GoORM
- Redis 從入門到實戰Redis
- metaq入門部署到實戰
- java zTree非同步載入實戰Java非同步
- web3從入門到實戰-理論篇Web