国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

現(xiàn)代瀏覽器性能優(yōu)化-CSS篇

scq000 / 853人閱讀

摘要:當(dāng)瀏覽器發(fā)現(xiàn)時,就會下載,解析,然后更新,這時會引起一次重繪。這個過程中,有兩個非常嚴(yán)重的問題。如果你對異步加載的方案感興趣,歡迎留言與我討論擴(kuò)展閱讀瀏覽器的工作原理關(guān)于你應(yīng)該知道些什么,和它們在之中的優(yōu)先級

我來填坑了,CSS篇終于寫出來了,如果你沒看過前面的JS篇,可以在這里觀看。

眾所周知,CSS的加載會阻塞瀏覽器渲染或是引起瀏覽器重繪,目前業(yè)界普遍推薦把CSS放到中,防止在CSS還沒加載完,DOM就已經(jīng)繪制出來了,造成CSS加載完成后的重繪。那在現(xiàn)代瀏覽器中我們有沒有辦法提高首屏渲染速度那?

你是不是經(jīng)常在第一次打開某個網(wǎng)站的時候看到這種情況,本來的頁面是這樣的

實(shí)際上剛加載出來的是這樣的

字體文件沒加載出來,或者加載的太慢了

理解CSS解析過程

以下面這段HTML為例,解釋一遍CSS加載解析的過程。



  
  


  

Text

瀏覽器自上而下讀取HTML文檔,當(dāng)發(fā)現(xiàn)headStyle.css的時候,停止Parser HTML,開始下載headStyle.css,解析headStyle.css的過程中發(fā)現(xiàn)字體文件webfont.woff2,開始下載webfont.woff2,并繼續(xù)解析css生成CSSStyleSheet。解析完畢后,繼續(xù)Parser HTML,當(dāng)發(fā)現(xiàn)p標(biāo)簽時,會將p標(biāo)簽結(jié)合當(dāng)前的CSSStyleSheet展示出來,此時用戶屏幕中已經(jīng)有p標(biāo)簽的內(nèi)容了。當(dāng)瀏覽器發(fā)現(xiàn)bodyEndStyle.css時,就會下載headStyle.css,解析CSS,然后更新CSSStyleSheet,這時會引起一次重繪。當(dāng)字體下載完畢的時候也會引起一次重繪。

這個過程中,有兩個非常嚴(yán)重的問題。一、如果headStyle.css文件很大,瀏覽器需要解析很多行CSS后才能還有個字體文件需要下載,其實(shí)此時已經(jīng)很晚了,字體下載時間稍長一點(diǎn),就會出現(xiàn)我前面截圖提到的問題。二、bodyEndStyle.css中如果存在p標(biāo)簽對應(yīng)的樣式,那p標(biāo)簽的樣式會在bodyEndStyle.css解析完成后,改變一次樣式,很影響體驗(yàn)。

如何解決這些問題那?其中也會用到一些JS篇中提到的點(diǎn),如果沒看過,建議先看看。

優(yōu)化核心依舊是減少下載時間

JS篇中的預(yù)先解析DNS(dns-prefetch)依舊適用,提前解析CSS文件所在域名的DNS。

Preload

因?yàn)镃SS已經(jīng)在head中,我們不需要為css加preload屬性了,但是css中用到的字體文件,一定要在所有css之前proload上。

首頁CSS內(nèi)聯(lián),非必要CSS異步加載

首頁用到的CSS內(nèi)聯(lián)寫在中,其余CSS均采用異步加載,可以采用這種自己實(shí)現(xiàn)的加載CSS的方法,在合適的需要時加載需要的css

function LoadStyle(url) {
  try {
    document.createStyleSheet(url)
  } catch(e) {
    var cssLink = document.createElement("link");
    cssLink.rel = "stylesheet";
    cssLink.type = "text/css";
    cssLink.href = url;
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(cssLink)
  }
}

如果你使用webpack,那就更輕松了,使用import函數(shù),大致如下

// 在a.js模塊中直接引入css
import "style.css"
// 在需要a.js模塊的地方
improt("path-of-a.js").then(module => {})

webpack打包后,其實(shí)是把style.css打包進(jìn)了a.js,在異步加載a.js的時候,會將style.css中的代碼插入haed標(biāo)簽中。

終極完美結(jié)構(gòu)



  
  Faster
  

  
  
  
  
  
  
  

  






在JS篇)中,我已經(jīng)解釋過這套結(jié)構(gòu)中JS的執(zhí)行順序了,本篇只是加入了CSS和字體。至此,我心中終極完美的頁面HTML結(jié)構(gòu)就是這樣了。

如果你對異步加載CSS的方案感興趣,歡迎留言與我討論!

擴(kuò)展閱讀

瀏覽器的工作原理

關(guān)于Preload, 你應(yīng)該知道些什么?

Preload,Prefetch 和它們在 Chrome 之中的優(yōu)先級

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/90531.html

相關(guān)文章

  • 現(xiàn)代覽器性能優(yōu)化-CSS

    摘要:當(dāng)瀏覽器發(fā)現(xiàn)時,就會下載,解析,然后更新,這時會引起一次重繪。這個過程中,有兩個非常嚴(yán)重的問題。如果你對異步加載的方案感興趣,歡迎留言與我討論擴(kuò)展閱讀瀏覽器的工作原理關(guān)于你應(yīng)該知道些什么,和它們在之中的優(yōu)先級 我來填坑了,CSS篇終于寫出來了,如果你沒看過前面的JS篇,可以在這里觀看。 眾所周知,CSS的加載會阻塞瀏覽器渲染或是引起瀏覽器重繪,目前業(yè)界普遍推薦把CSS放到中,防止在CS...

    flyer_dev 評論0 收藏0
  • 現(xiàn)代覽器性能優(yōu)化-CSS

    摘要:當(dāng)瀏覽器發(fā)現(xiàn)時,就會下載,解析,然后更新,這時會引起一次重繪。這個過程中,有兩個非常嚴(yán)重的問題。如果你對異步加載的方案感興趣,歡迎留言與我討論擴(kuò)展閱讀瀏覽器的工作原理關(guān)于你應(yīng)該知道些什么,和它們在之中的優(yōu)先級 我來填坑了,CSS篇終于寫出來了,如果你沒看過前面的JS篇,可以在這里觀看。 眾所周知,CSS的加載會阻塞瀏覽器渲染或是引起瀏覽器重繪,目前業(yè)界普遍推薦把CSS放到中,防止在CS...

    CoffeX 評論0 收藏0
  • 王下邀月熊_Chevalier的前端每周清單系列文章索引

    摘要:感謝王下邀月熊分享的前端每周清單,為方便大家閱讀,特整理一份索引。王下邀月熊大大也于年月日整理了自己的前端每周清單系列,并以年月為單位進(jìn)行分類,具體內(nèi)容看這里前端每周清單年度總結(jié)與盤點(diǎn)。 感謝 王下邀月熊_Chevalier 分享的前端每周清單,為方便大家閱讀,特整理一份索引。 王下邀月熊大大也于 2018 年 3 月 31 日整理了自己的前端每周清單系列,并以年/月為單位進(jìn)行分類,具...

    2501207950 評論0 收藏0
  • 前端每周清單半年盤點(diǎn)之 CSS

    摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。它能夠?yàn)槲覀兲峁╊愃朴陬A(yù)處理器命名空間等多方面的輔助。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡迎關(guān)注【前端之巔】微信公眾號(ID:f...

    RaoMeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<