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

資訊專欄INFORMATION COLUMN

《Webkit技術內幕》之頁面渲染過程

forsigner / 489人閱讀

摘要:文章同步到技術內幕之頁面渲染過程最近拜讀了傳說中的技術內幕一書,有很大收獲,尤其是對頁面渲染有了較深的認識。解析語法分析,基于詞法解釋器生成的新標記,構建成抽象語法樹,解析器嘗試將其與某條語法規則進行匹配。

文章同步到github《Webkit技術內幕》之頁面渲染過程

最近拜讀了傳說中的《Webkit技術內幕》一書,有很大收獲,尤其是對頁面渲染有了較深的認識。由于功力有限,而且書中設計到較多的底層也無法理解,所以本文主要整理和分享一下自己理解的基于Webkit內核瀏覽器的頁面渲染的整體過程,不做深入介紹(也做不了深入介紹)。
瀏覽器內核
瀏覽器之所以能呈現出更重頁面,正是由于瀏覽器內核的存在,也被稱為渲染引擎,主要作用就是,也就是能把HTML/CSS/JavaScript文本其相關的資源轉化轉化成可視化可交互的圖像頁面,這個過程就是渲染。
四大主流內核
內核 瀏覽器 內核識別碼
Trident IE、360 -ms
Gecko Firefox(火狐) -moz
presto Opera(歐朋) -o
Webkit Chrome(谷歌) safari(蘋果) -webkit
Webkit架構

本文主要是基于Webkit內核,所以先放一張整理Webkit架構圖(并非全部模塊, 主要包含主要模塊),大致介紹一下Webkit的架構

自下而上主要分為三層:

1.操作系統層

2.Webkit渲染過程中依賴的很多第三方模塊

3.Webkit層,主要包含webCore、渲染引擎層、嵌入式接口層,綁定層

1.操作系統層

由Webkit可以運行在不同的操作系統上,瀏覽器也可以運行在不同的操作系統上,另外與對磁盤和內存的操作都需要操作系統來操作,所以需要操作系統支持。說白了就是一切需要對硬件操作的程序都需要操作系統的支持。

2.第三方模塊層

資源的獲取、頁面的渲染等需要依賴第三方庫來完成,網絡庫、圖形庫、視頻庫等都是Webkit之所以能工作的基礎,Webkit來根據需要來使用相應的庫。

3. WebKitCore

WebKitCore部分是所有瀏覽器共享的部分,是渲染網頁的基礎,包括HTML解釋器、CSS解釋器、SVG、DOM、渲染樹等

1.HTML解釋器

解釋HTML文本的解釋器,把html文檔解析成DOM(文檔對象模型)樹,表示整個html文檔

2.CSS解釋器

問DOM樹中各個元素對象計算出樣式信息,后計算后面的網頁布局做基礎

3.布局

把DOM樹和解析后的CSS樹的信息結合起來,形成一個包含頁面所有元素和樣式的信息的一個內部表示模型

4.繪圖

使用第三方依賴的庫如2D/3D圖形庫等將布局計算后的節點繪制成圖像
4. JavaScript引擎

對于JavaScript引擎有必要說一下,JavaScript引擎就是將JavaScript代碼解析處理并運行的環境,負責整個JavaScript程序的編譯及執行過程。

1.webkit默認的引擎是JavaScriptCore引擎,對于不同瀏覽器對于引擎的實現JavaScript引擎的實現也不一樣,比如Chrome瀏覽器是基于V8引擎等。

2.另外在解析/語法分析,構建出"抽象語法樹"之后,會將"抽象語法樹"進行編譯,轉化為一組機器指令,拿一個例子來說

var a = 1

JavaScript會創建一個變量a,并分配內存,將1這個值存儲在a的變量中。

3.JavaScript可以修改網頁內容,也就是修改DOM和和CSS樣式,事實上,也正是javaScript代碼通過DOM和CSSOM暴露出的接口來進行修改,從而改變頁面渲染的效果

5. 綁定層和嵌入式接口層

綁定層和嵌入式接口層最主要與Webkit項目的移植有關,就比如基于linux內核的CentOS、Ubuntu等系統一樣。嵌入式接口層主要提供給瀏覽器調用,不同瀏覽器廠商會基Webkit以及對外暴露的接口實現自己的功能。

頁面渲染過程

從輸入url開始整體介紹一下頁面的渲染流程,然后具體步驟再詳細加以說明

1.用戶輸入url按下回車后,瀏覽器開啟一個進程對url進行分析,如果是http協議,按照web方式處理

2.根據域名進行DNS解析,解析之后發送第二次get請求,進行HTTP協議會話,以獲取資源

3.此時進入到web服務器上的 Web Server,如 Apache、Tomcat、Node.JS 等web服務器;

4.繼續進入后端應用程序,如PHP、Java等找到對應請求處理,最后由web服務器傳送給瀏覽器資源

5.因為資源的位置以URL(統一資源定位符)來區分,發送請求時,如果本地有緩存,發送請求的同時會帶上緩存的相關信息,與服務器資源作比較,比如更新時間等,服務器如果沒有更新則返回304,直接使用緩存,否則向服務器請求資源。

5.瀏覽器開始下載HTML文檔

6.瀏覽器內核開始解析文檔(整個html文檔就是一大串字符串),構建DOM樹,解析成DOM樹的過程中,如果遇到JavaScript代碼,則交給JavaScript引擎來執行,等到DOM樹構建完成后觸發DOMContentLoaded事件

7.解析CSS,構建CSS樹,構建CSSOM(在瀏覽器控制臺輸入document.styleSheets按下回車就可以看到styleSheetList的集合了)

8.CSS解析完成之后,在DOM樹的基礎上附加解釋后的樣式信息,形成RenderObject樹,在RenderObject節點創建的同時,webkit會根據網頁層次構建出RenderLayer樹,同時構建出一個虛擬的繪圖上下文(與平臺無關的抽象類),最后根據繪圖上下文(需要依賴2D/3D庫)進行繪制,最終也就是用戶看到的可交互的頁面。

頁面渲染細節

上面介紹了頁面從輸入url發送請求后到頁面渲染的整體流程,下面補充一下在這整個過程中的一些細節知識點,方面更好的理解頁面的渲染過程

1. 首先理解頁面是分層次的,比如說如下代碼片段代碼




    
    Document


    

aaa

當網頁構建層次的時候,html元素為根層,此時創建一個層,html元素的所有子節點、子節點的子節點,依次類推,如dody,div,p為普通元素,并不會創建新的層次接口,video元素需要進行創建新層來進行視頻處理和渲染。

如下情況,都需要建立新的RenderLayer節點

備注: 圖片直接截取于《Webkit技術內幕》

2.從資源字節流到構建成DOM樹

備注: 圖片直接截取于《Webkit技術內幕》

1.分詞/詞法分析,從字節流到字符流流(串),是分段的詞法解釋器會將字符串解釋成標記(相當于字典中的詞語)

如 var a = 1; var、a、=、1 、;??崭袷欠駮划斪髟~法單元,取決于空格在
這門語言中是否具有意義。

2.解析/語法分析,基于詞法解釋器生成的新標記,構建成“抽象語法樹”,解析器嘗試將其與某條語法規則進行匹配。如果發現了匹配規則,解析器會將一個對應于該標記的節點添加到解析樹中,然后繼續請求下一個標記

3.HTML文檔對應的DOM樹的對應關系

4.DOM樹和RenderObject樹之間的對應關系

備注: 圖片直接截取于《Webkit技術內幕》

5. RenderObject樹與RenderLayer樹之間的對應關系

多對一的關系,RenderObject多個節點可以對應RenderLayer的一個層次結構

備注: 圖片直接截取于《Webkit技術內幕》

以上文章就是整理的頁面渲染整體流程,很多細節沒有具體講,比如解析html文檔時,利用棧來處理、繪制3D圖形的GPU加速等、由于能力有限不敢多講,也難講清楚,這些還是去看大神們具體的書比較,感興趣的小伙伴,《WebKit技術內幕》了解一下

本文主要參考資料:

WebKit技術內幕
Chrome 渲染優化 - 層模型
前端文摘:深入解析瀏覽器的幕后工作原理

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/52807.html

相關文章

  • Webkit技術內幕頁面渲染過程

    摘要:文章同步到技術內幕之頁面渲染過程最近拜讀了傳說中的技術內幕一書,有很大收獲,尤其是對頁面渲染有了較深的認識。解析語法分析,基于詞法解釋器生成的新標記,構建成抽象語法樹,解析器嘗試將其與某條語法規則進行匹配。 文章同步到github《Webkit技術內幕》之頁面渲染過程 最近拜讀了傳說中的《Webkit技術內幕》一書,有很大收獲,尤其是對頁面渲染有了較深的認識。由于功力有限,而且書中設...

    vvpvvp 評論0 收藏0
  • Webkit技術內幕頁面渲染過程

    摘要:文章同步到技術內幕之頁面渲染過程最近拜讀了傳說中的技術內幕一書,有很大收獲,尤其是對頁面渲染有了較深的認識。解析語法分析,基于詞法解釋器生成的新標記,構建成抽象語法樹,解析器嘗試將其與某條語法規則進行匹配。 文章同步到github《Webkit技術內幕》之頁面渲染過程 最近拜讀了傳說中的《Webkit技術內幕》一書,有很大收獲,尤其是對頁面渲染有了較深的認識。由于功力有限,而且書中設...

    adam1q84 評論0 收藏0
  • WebKit 技術內幕瀏覽器與WebKit內核

    摘要:微信公眾號愛寫的阿拉斯加如有問題或建議,請后臺留言,我會盡力解決你的問題。而技術內幕是基于的項目的講解。有興趣的朋友可以掃下方二維碼公眾號愛寫的阿拉斯加分享開發相關的技術文章,熱點資源,全棧程序員的成長之路和大家一起交流成長。 微信公眾號:愛寫bugger的阿拉斯加如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 此文章是我最近在看的【WebKit 技術內幕】一書的一些理解和做...

    jindong 評論0 收藏0
  • 瀏覽器內核WebKit 架構與模塊

    摘要:多線程的主要目的就是為了保持用戶界面的高響應度,保證線程進程中的主線程不會被任何其他費用時的操作阻礙從而影響了對用戶操作的響應。 showImg(https://segmentfault.com/img/remote/1460000016113034); 微信公眾號:愛寫bugger的阿拉斯加如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 此文章是我最近在看的【WebKit ...

    The question 評論0 收藏0

發表評論

0條評論

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