WebKit內核加載渲染網頁的過程

WebKit引擎快速的原因
服務器君一共花費了119.923 ms進行了5次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

在WebKit渲染網頁之前,它需要將頁面和所有引用的資源加載完畢。其中會涉及到不同層面的工作。在本文中,我將重點關注WebCore(WebKit中主要渲染組件)是如何在加載過程中發揮作用的。

WebKit包含兩條加載流水線,其中一條負責將文檔加載到frames當中,另一條負責加載其他資源(比如圖片、腳本一類)。下圖描述了兩條流水線中涉及的主要對象。

加載Frames

FrameLoader負責將文檔加載到frames當中,當點擊鏈接時,FrameLoader會創建一個新的DocumentLoader對象,并置于“policy”狀態,接著就等待WebKit客戶端決定該如何處理這次加載。通常,客戶端會告訴FrameLoader將加載操作視為一次導航(而不是一次加載阻塞)

一旦客戶端告訴FrameLoader將加載視作導航,FrameLoader將DocumentLoader置于“provisional”狀態,此時將開始網絡請求并等待結論:這個網絡請求最終是下載一個文件還是一份可解析的文檔。

DocumentLoader接下來會創建MainResourceLoader對象,它的作用是與瀏覽器所運行的系統所提供的網絡庫打交道,網絡庫通過ResourceHandle接口提供。將MainResourceLoader和DocumentLoader分離開主要有兩個目的:

  1. MainResourceLoader處理ResourceHandle回調過程與DocumentLoader分離。
  2. MainResourceLoader對象的生命周期與DocumentLoader的生命周期解耦(DocumentLoader的生命周期與Document對象綁定在一起)。

一旦加載系統通過網絡獲得足夠多信息,以便把文檔進行呈現,FrameLoader將DocumentLoader置于“committed”狀態,這時Frame對象就要顯示這個新加載的文檔了。

加載子資源

網頁不僅僅由HTML組成。我們還需要加載其中的圖片、腳本等等。DocLoader對象就來負責加載這些資源(注意DocLoader和DocumentLoader名字很像,但是分工是不同的)。

我們以加載圖片為例。為了加載一張圖片,DocLoader首先詢問Cache是否已經有該圖片的副本(以CachedImage對象存在)。如果存在,DocLoader則可快速響應。為了更加高效,Cache經常在內存中保存解碼之后的圖片數據,這樣避免解碼兩次。

如果圖片沒有在Cache中,Cache會創建一個CachedImage對象來表示這個圖片。CachedImage對象讓Loader對象來發起網絡請求,Loader會創建SubresourceLoader來做這個事情。SubresourceLoader所扮演的角色與剛剛介紹的MainResourceLoader的角色類似。

改進點

WebKit加載流水線當中有很多需要改進的地方。FrameLoader過于復雜,除了加載frame以外還承擔了很多其他工作。比如,FrameLoader有好幾個名為“load”的方法,很容混淆。它來負責創建窗口,看上去和加載frame沒有什么關系。另外,加載流水線的若干階段沒有必要像現在耦合的這么緊,層次劃分也不合理,存在不同層次的對象互相訪問,比如:MainResourceLoader將獲取到的字節直接丟給FrameLoader而不是DocumentLoader。

如果研究了上面的圖,你會發現Cache只會被子資源利用。主要資源的加載并沒有得到WebKit內存緩存的支持。如果能夠統一這兩個加載過程,那么主資源的加載性能也會得到提升。一直以來我們都在不斷優化性能來讓頁面加載的越來越快。

本文地址:http://www.824886.live/librarys/veda/detail/2030,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.824886.live/librarys/veda/detail/2030

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏。

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《代碼之美》 聶雪軍 (譯者)

《代碼之美》介紹了人類在一個奮斗領域中的創造性和靈活性:計算機系統的開發領域。在每章中的漂亮代碼都是來自獨特解決方案的發現,而這種發現是來源于作者超越既定邊界的遠見卓識,并且識別出被多數人忽視的需求以及找出令人嘆為觀止的問題解決方案?!洞a之美》33章,有38位作者,每位作者貢獻一章。每位作者都將自己心目中對于“美麗的代碼”的認識濃縮在一章當中,張力十足。38位大牛,每個人對代碼之美都有自己獨特的認識,現在一覽無余的放在一起,對于熱愛程序的每個人都不啻一場盛宴。 雖然《代碼之美》的涉獵范圍很廣,但也只能代表一小部分在這個軟件開發這個最令人興奮領域所發生的事情。

更多計算機寶庫...

云南快乐十分走势一定牛 双彩网开奖结果查询 五分彩万位五码计划投注必胜法 nba重播 哪里有贵阳麻将群 36选7胆拖投注表 王中王期期中特准 p62中奖号码 网游赚钱排行榜前十名 浙江20选5最新开奖结果查询今天 pc蛋蛋快速