成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

DOM和CSS渲染過(guò)程摘抄-021

happyfish / 1320人閱讀

摘要:和渲染過(guò)程一個(gè)簡(jiǎn)單的頁(yè)面如上所示。的主要是為了完成匹配并把附加上上的每個(gè)。然后,計(jì)算每個(gè)也就是每個(gè)的位置,這又叫和過(guò)程。將與合并成一個(gè)渲染樹(shù)。優(yōu)化關(guān)鍵渲染路徑就是指最大限度縮短執(zhí)行上述第步至第步耗費(fèi)的總時(shí)間

DOM和CSS渲染過(guò)程 DOM



    
    
    
    Document


    

一個(gè)簡(jiǎn)單的html頁(yè)面如上所示。

DOM有兩個(gè)概念:

解析

渲染

DOM解析

DOM解析:就是把你所寫的各種html標(biāo)簽,生成一個(gè)DOM TREE,可以認(rèn)為就是生成了一個(gè)最原始的頁(yè)面,一點(diǎn)樣式都沒(méi)有,毫無(wú)CSS修飾。

DOM渲染:瀏覽器會(huì)把本身默認(rèn)的樣式+用戶自己寫得樣式整合到一起,形成一個(gè)CSS TREE,而DOM渲染就是指DOM TREE 和 CSS TREE 結(jié)合到一起,生成一個(gè)Render TREE,呈現(xiàn)出一個(gè)帶有樣式的頁(yè)面。

1)瀏覽器會(huì)解析三個(gè)東西:

一個(gè)是HTML/SVG/XHTML,事實(shí)上,Webkit有三個(gè)C++的類對(duì)應(yīng)這三類文檔。解析這三種文件會(huì)產(chǎn)生一個(gè)DOM Tree。
CSS,解析CSS會(huì)產(chǎn)生CSS規(guī)則樹(shù)。
Javascript,腳本,主要是通過(guò)DOM API和CSSOM API來(lái)操作DOM Tree和CSS Rule Tree.
2)解析完成后,瀏覽器引擎會(huì)通過(guò)DOM Tree 和 CSS Rule Tree 來(lái)構(gòu)造 Rendering Tree。注意:

Rendering Tree 渲染樹(shù)并不等同于DOM樹(shù),因?yàn)橐恍┫馠eader或display:none的東西就沒(méi)必要放在渲染樹(shù)中了。
CSS 的 Rule Tree主要是為了完成匹配并把CSS Rule附加上Rendering Tree上的每個(gè)Element。也就是DOM結(jié)點(diǎn)。也就是所謂的Frame。
然后,計(jì)算每個(gè)Frame(也就是每個(gè)Element)的位置,這又叫l(wèi)ayout和reflow過(guò)程。
3)最后通過(guò)調(diào)用操作系統(tǒng)Native GUI的API繪制。

線程

js 是單線程,但是瀏覽器是多線程的。

瀏覽器會(huì)有不同的線程,比如說(shuō)

GUI 渲染線程

JS 線程

定時(shí)器觸發(fā)線程 (setTimeout)

瀏覽器事件線程 (onclick)

http 異步線程

.....

上面的幾個(gè)線程,在同一個(gè)瞬間,只有一個(gè)線程起作用,也就是互斥的。比如說(shuō)瀏覽器在執(zhí)行GUI 渲染線程呢,那么其他的4個(gè)進(jìn)程,都處于掛起的狀態(tài),在隊(duì)列里面呆著。
DOM的渲染對(duì)應(yīng)的就是GUI渲染進(jìn)程;JS的執(zhí)行對(duì)應(yīng)的就是JS線程;所以,DOM的渲染與JS代碼的運(yùn)行,在同一瞬間只能有一個(gè)執(zhí)行!

阻塞

阻塞XXX是指讓XXX暫停了。比如JS的執(zhí)行阻塞DOM解析,就是

DOM解析 --> JS執(zhí)行(此時(shí)DOM解析暫停) --> JS執(zhí)行完畢 --> DOM繼續(xù)解析

DOM與CSS

先看它倆之間的關(guān)系,也就是分析CSS的加載對(duì)DOM的解析和渲染的影響。
很明顯,DOM自己在那解析DOM TREE 和 css樣式有啥關(guān)系啊,所以css不影響DOM解析。
也很明顯,DOM渲染就是要生成樣式呢,肯定和css有關(guān)系啊,所以css影響DOM渲染。
結(jié)論:

css的加載不會(huì)阻塞DOM的解析

css的加載會(huì)阻塞DOM的渲染

DOM與JS

JS(加載和執(zhí)行) 都會(huì)阻塞 DOM 的解析,因?yàn)镴S中可能會(huì)對(duì)DOM進(jìn)行操作,可能改變DOM的結(jié)構(gòu),所以JS的加載和執(zhí)行是會(huì)阻塞DOM解析的。
JS(加載和執(zhí)行) 都會(huì)阻塞 DOM 的渲染,同上面一樣,因?yàn)镴S中可能對(duì)樣式進(jìn)行操作。
注: html中每遇到< script >標(biāo)簽,頁(yè)面就會(huì)重新渲染一次,因?yàn)橐WC標(biāo)簽中的JS代碼拿到的都是最新的樣式。
結(jié)論:

JS的加載和執(zhí)行會(huì)阻塞DOM的解析

JS的加載和執(zhí)行會(huì)阻塞DOM的渲染

CSS與JS

在線程那里說(shuō)了,CSS的加載會(huì)阻塞JS的執(zhí)行,因?yàn)镃SS的渲染GUI線程和JS運(yùn)行線程互斥。
但是CSS不會(huì)阻塞JS的加載(瀏覽器可以預(yù)先掃描并下載)
注1:

CSS、JS之間的加載是否阻塞,這里不考慮,因?yàn)楝F(xiàn)代的瀏覽器都會(huì)預(yù)先偷看文檔,并且下載。

注2:

這里的JS引入方式不包括async和defer

結(jié)論:

CSS的加載阻塞JS的運(yùn)行,不阻塞JS的加載

Note: 簡(jiǎn)單提一句,請(qǐng)注意 visibility: hidden 與 display: none 是不一樣的。前者隱藏元素,但元素仍占據(jù)著布局空間(即將其渲染成一個(gè)空框),而后者 (display: none) 將元素從渲染樹(shù)中完全移除,元素既不可見(jiàn),也不是布局的組成部分。

下面簡(jiǎn)要概述了瀏覽器完成的步驟:

處理 HTML 標(biāo)記并構(gòu)建 DOM 樹(shù)。

處理 CSS 標(biāo)記并構(gòu)建 CSSOM 樹(shù)。

將 DOM 與 CSSOM 合并成一個(gè)渲染樹(shù)。

根據(jù)渲染樹(shù)來(lái)布局,以計(jì)算每個(gè)節(jié)點(diǎn)的幾何信息。

將各個(gè)節(jié)點(diǎn)繪制到屏幕上。

優(yōu)化關(guān)鍵渲染路徑_就是指最大限度縮短執(zhí)行上述第 1 步至第 5 步耗費(fèi)的總時(shí)間

https://developers.google.com...

https://developers.google.com...

https://developers.google.com...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104991.html

相關(guān)文章

  • DOMCSS渲染過(guò)程摘抄-021

    摘要:和渲染過(guò)程一個(gè)簡(jiǎn)單的頁(yè)面如上所示。的主要是為了完成匹配并把附加上上的每個(gè)。然后,計(jì)算每個(gè)也就是每個(gè)的位置,這又叫和過(guò)程。將與合并成一個(gè)渲染樹(shù)。優(yōu)化關(guān)鍵渲染路徑就是指最大限度縮短執(zhí)行上述第步至第步耗費(fèi)的總時(shí)間 DOM和CSS渲染過(guò)程 DOM Document 一個(gè)簡(jiǎn)單的html頁(yè)面如上所示。 DOM有兩個(gè)概念: 解析 渲染...

    gougoujiang 評(píng)論0 收藏0
  • CSS Conf -《新時(shí)代CSS布局》學(xué)習(xí)總結(jié)

    摘要:分享嘉賓簡(jiǎn)介新時(shí)代布局的分享者是新加坡的國(guó)際知名專家陳慧晶。陳慧晶老師的分享主題介紹如下布局經(jīng)常是令前端開(kāi)發(fā)者頭痛的一塊工作。布局系統(tǒng)在這一小節(jié)中,慧晶老師主要分享了跟這新時(shí)代布局的三大棟梁。的首個(gè)公開(kāi)工作草案是在發(fā)布的,而的則是發(fā)布。 作者:陳大魚(yú)頭 github: KRISACHAN 記錄原因:2019年3月30日在深圳舉行了第五屆的CSS Conf,魚(yú)頭作為一枚CSS新手以及愛(ài)好者也...

    番茄西紅柿 評(píng)論0 收藏0
  • CSS Conf -《新時(shí)代CSS布局》學(xué)習(xí)總結(jié)

    摘要:分享嘉賓簡(jiǎn)介新時(shí)代布局的分享者是新加坡的國(guó)際知名專家陳慧晶。陳慧晶老師的分享主題介紹如下布局經(jīng)常是令前端開(kāi)發(fā)者頭痛的一塊工作。布局系統(tǒng)在這一小節(jié)中,慧晶老師主要分享了跟這新時(shí)代布局的三大棟梁。的首個(gè)公開(kāi)工作草案是在發(fā)布的,而的則是發(fā)布。 作者:陳大魚(yú)頭 github: KRISACHAN 記錄原因:2019年3月30日在深圳舉行了第五屆的CSS Conf,魚(yú)頭作為一枚CSS新手以及愛(ài)好者也...

    libxd 評(píng)論0 收藏0
  • Router入門0x201: 從 URL 到 SPA

    摘要:的全稱是統(tǒng)一資源定位符英文,可以這么說(shuō),是一種標(biāo)準(zhǔn),而網(wǎng)址則是符合標(biāo)準(zhǔn)的一種實(shí)現(xiàn)而已。渲染器,將組件渲染到頁(yè)面上。 0x000 概述 從這一章開(kāi)始就進(jìn)入路由章節(jié)了,并不直接從如何使用react-route來(lái)講,而是從路由的概念和實(shí)現(xiàn)來(lái)講,達(dá)到知道路由的本質(zhì),而不是只知道如何使用react-route庫(kù)的目的,畢竟react-route只是一個(gè)庫(kù),是路由的一個(gè)實(shí)現(xiàn)而已,而不是路由本身。 ...

    honmaple 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<