欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

聊一聊瀏覽器渲染原理及流程

2021-10-23    分類: 網(wǎng)站建設

我們可能都知道瀏覽器含有一個渲染引擎,用來渲染窗口所展示的內(nèi)容。默認情況下,渲染引擎可以顯示html、xml文檔及圖片,它也可以借助插件(一種瀏覽器擴展)顯示其他類型數(shù)據(jù),例如使用PDF閱讀器插件,用于顯示PDF格式。但是其具體的渲染原理和流程估計也有很多人都不知道或者不清楚吧。這些天研究了一下瀏覽器的渲染原理,有了些心得,在這里跟大家分享一下,這里只討論渲染引擎最主要的用途——顯示應用了CSS之后的html及圖片。


渲染引擎簡介

本文所討論的瀏覽器——Firefox、Chrome和Safari是基于兩種渲染引擎構(gòu)建的,F(xiàn)irefox使用Geoko——Mozilla自主研發(fā)的渲染引擎,Safari和Chrome都使用webkit。


渲染主流程

渲染引擎首先通過網(wǎng)絡獲得所請求文檔的內(nèi)容,通常以8K分塊的方式完成。下面是渲染引擎在取得內(nèi)容之后的基本流程:

解析html以構(gòu)建dom樹 -> 構(gòu)建render樹 -> 布局render樹 -> 繪制render樹


這里先解釋一下幾個概念,方便大家理解:

DOM Tree:瀏覽器將HTML解析成樹形的數(shù)據(jù)結(jié)構(gòu)。

CSS Rule Tree:瀏覽器將CSS解析成樹形的數(shù)據(jù)結(jié)構(gòu)。

  Render Tree: DOM和CSSOM合并后生成Render Tree。

layout: 有了Render Tree,瀏覽器已經(jīng)能知道網(wǎng)頁中有哪些節(jié)點、各個節(jié)點的CSS定義以及他們的從屬關(guān)系,從而去計算出每個節(jié)點在屏幕中的位置。

painting: 按照算出來的規(guī)則,通過顯卡,把內(nèi)容畫到屏幕上。

reflow(回流):當瀏覽器發(fā)現(xiàn)某個部分發(fā)生了點變化影響了布局,需要倒回去重新渲染,內(nèi)行稱這個回退的過程叫reflow。reflow 會從 <html> 這個 root frame 開始遞歸往下,依次計算所有的結(jié)點幾何尺寸和位置。reflow幾乎是無法避免的。現(xiàn)在界面上流行的一些效果,比如樹狀目錄的折疊、展開(實質(zhì)上是元素的顯示與隱藏)等,都將引起瀏覽器的reflow。鼠標滑過、點擊……只要這些行為引起了頁面上某些元素的占位面積、定位方式、邊距等屬性的變化,都會引起它內(nèi)部、周圍甚至整個頁面的重新渲染。通常我們都無法預估瀏覽器到底會reflow哪一部分的代碼,它們都彼此相互影響著。

repaint(重繪):改變某個元素的背景色、文字顏色、邊框顏色等等不影響它周圍或內(nèi)部布局的屬性時,屏幕的一部分要重畫,但是元素的幾何尺寸沒有變。

注意:(1)display:none 的節(jié)點不會被加入Render Tree,而visibility: hidden 則會,所以,如果某個節(jié)點最開始是不顯示的,設為display:none是更優(yōu)的。

  (2)display:none 會觸發(fā) reflow,而 visibility:hidden 只會觸發(fā) repaint,因為沒有發(fā)現(xiàn)位置變化。

   (3)有些情況下,比如修改了元素的樣式,瀏覽器并不會立刻reflow 或 repaint 一次,而是會把這樣的操作積攢一批,然后做一次 reflow,這又叫異步 reflow 或增量異步 reflow。但是在有些情況下,比如resize 窗口,改變了頁面默認的字體等。對于這些操作,瀏覽器會馬上進行 reflow。


來看看webkit的主要流程:


再來看看Geoko的主要流程:


 Gecko 里把格式化好的可視元素稱做“幀樹”(Frame tree)。每個元素就是一個幀(frame)。 webkit 則使用”渲染樹”這個術(shù)語,渲染樹由”渲染對象”組成。webkit 里使用”layout”表示元素的布局,Gecko則稱為”reflow”。Webkit使用”Attachment”來連接DOM節(jié)點與可視化信息以構(gòu)建渲染樹。一個非語義上的小差別是Gecko在HTML與DOM樹之間有一個附加的層 ,稱作”content sink”,是創(chuàng)建DOM對象的工廠。

盡管Webkit與Gecko使用略微不同的術(shù)語,這個過程還是基本相同的,如下:

1. 瀏覽器會將HTML解析成一個DOM樹,DOM 樹的構(gòu)建過程是一個深度遍歷過程:當前節(jié)點的所有子節(jié)點都構(gòu)建好后才會去構(gòu)建當前節(jié)點的下一個兄弟節(jié)點。

2. 將CSS解析成 CSS Rule Tree 。

3. 根據(jù)DOM樹和CSSOM來構(gòu)造 Rendering Tree。注意:Rendering Tree 渲染樹并不等同于 DOM 樹,因為一些像Header或display:none的東西就沒必要放在渲染樹中了。

4. 有了Render Tree,瀏覽器已經(jīng)能知道網(wǎng)頁中有哪些節(jié)點、各個節(jié)點的CSS定義以及他們的從屬關(guān)系。下一步操作稱之為layout,顧名思義就是計算出每個節(jié)點在屏幕中的位置。

5. 再下一步就是繪制,即遍歷render樹,并使用UI后端層繪制每個節(jié)點。

注意:上述這個過程是逐步完成的,為了更好的用戶體驗,渲染引擎將會盡可能早的將內(nèi)容呈現(xiàn)到屏幕上,并不會等到所有的html都解析完成之后再去構(gòu)建和布局render樹。它是解析完一部分內(nèi)容就顯示一部分內(nèi)容,同時,可能還在通過網(wǎng)絡下載其余內(nèi)容。

本文標題:聊一聊瀏覽器渲染原理及流程
當前鏈接:http://aaarwkj.com/news37/132537.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設網(wǎng)站營銷、網(wǎng)站制作、微信小程序、標簽優(yōu)化、App設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
亚洲激情人妻小说网| 高清亚洲一区二区三区| 丰满的少妇一区二区三区免费观看| 欧美日韩亚洲视频一区久久| 久久综合伊人欧美精品| 少妇被按摩高潮在线观看| 国产欧美一区二区三区久久| 夫妻性生活短是什么原因| 欧美亚洲综合日韩精品区| 久久久久久成人亚洲| 日本一级黄色影视大全| 亚洲国产精品综合久久久| 国产黄色av网站在线| 天天干天天干夜夜操| 日本中文字幕一区二区视频 | 激情五月婷婷我有我色| 日韩中文字幕一区二区不卡| 国产黄片一区二区不卡| 国产三级视频网站在线观看| 日本特黄特黄录像在线| 日韩精品毛片精品一区到三区| 中文字幕乱码一区二区欧美| 太爽了少妇高潮在线看片| 精品国产自在久久成人| 麻豆人妻少妇精品系列| 东京热男人的av天堂| 亚洲欧美国产日韩天堂区| 欧美日韩黄色人人小视频| 99久久精品免费国产一区| 久久国产精品亚洲av四虎| 亚洲国产中文日韩欧美在线| 日本国产福利视频在线观看| 欧美日韩一区二区综合在线视频 | 依依成人影院在线观看av| 国产亚洲欧美另类网爆| 亚洲av乱码毛片在线播放| 九九视频666免费| 国产片精品一区在线观看| 激情偷拍一区二区三区视频| 国产三级国产精品国产国在线观看| 亚州欧美制服另类国产|