欧美性xxxx极品高清,九九99久久精品综合,国产乱人伦精品一区二区,gogo欢欢销魄人体

首頁(yè) 我們 服務(wù) 網(wǎng)站建設(shè) 移動(dòng)應(yīng)用 案例 資訊 聯(lián)系
業(yè)務(wù)專線:15989169178

期待聆聽您的聲音

15989169178

不忽悠,不作惡,不欺詐;敬天理,存良知,思利他。
QQ咨詢 QQ咨詢 QQ咨詢
服務(wù)網(wǎng)點(diǎn):廣州 深圳 佛山 粵西

與我們一起分享美好

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

發(fā)布時(shí)間:2017-04-14 發(fā)布作者:睿思設(shè)計(jì) 查閱次數(shù):2983次 標(biāo)簽:廣州網(wǎng)站建設(shè) 廣州網(wǎng)站建設(shè)公司

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

 

渲染引擎簡(jiǎn)介

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

 

渲染主流程

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

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

 

 

 

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

  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)頁(yè)中有哪些節(jié)點(diǎn)、各個(gè)節(jié)點(diǎn)的CSS定義以及他們的從屬關(guān)系,從而去計(jì)算出每個(gè)節(jié)點(diǎn)在屏幕中的位置。

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

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

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

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

     (2)display:none 會(huì)觸發(fā) reflow,而 visibility:hidden 只會(huì)觸發(fā) repaint,因?yàn)闆](méi)有發(fā)現(xiàn)位置變化。

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

 

  來(lái)看看webkit的主要流程:

 

  再來(lái)看看Geoko的主要流程:

 


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

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

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

  2. 將CSS解析成 CSS Rule Tree 。

  3. 根據(jù)DOM樹和CSSOM來(lái)構(gòu)造 Rendering Tree。注意:Rendering Tree 渲染樹并不等同于 DOM 樹,因?yàn)橐恍┫馠eader或display:none的東西就沒(méi)必要放在渲染樹中了。

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

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

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


我們常見瀏覽器兼容性問(wèn)題與解決方案?

javascript選項(xiàng)卡切換樣式

我們的位置

廣州 廣州市黃埔區(qū)科學(xué)城科學(xué)大道18號(hào)芯大廈 159 8916 9178

深圳 深圳市南山區(qū)大沖國(guó)際中心九樓 159 1543 2684

粵西 茂名市茂南區(qū)油城三路粵西創(chuàng)業(yè)創(chuàng)新孵化基地B110 157 6767 8148

我們的服務(wù)

網(wǎng)站及移動(dòng)應(yīng)用 高端品牌網(wǎng)站 APP開發(fā) 小程序開發(fā) 微信運(yùn)營(yíng)

系統(tǒng)應(yīng)用開發(fā) OA/ERP/CRM/HR系統(tǒng)開發(fā) 教學(xué)管理系統(tǒng) 電商系統(tǒng) 應(yīng)用型軟件系統(tǒng)定制開發(fā)

了解我們

公司簡(jiǎn)介 聯(lián)系我們 我們的案例 新聞資訊

使用條款 隱私聲明 Cookies

© 2009-2025 廣州睿網(wǎng)信息科技有限公司 版權(quán)所有 粵ICP備16051058號(hào)