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

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

在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.snpmgr.live/librarys/veda/detail/2030,歡迎訪問原出處。

不打個分嗎?

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

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

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

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

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

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

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

《浪潮之巔》 吳軍 (作者)

近一百多年來,總有一些公司很幸運地、有意識或無意識地站在技術革命的浪尖之上。在長達十年甚至幾十年的時間里,它們代表著科技的浪潮,直到下一波浪潮的來臨。從19世紀末算起,AT&T公司、IBM公司、蘋果公司、英特爾公司、微軟公司、思科公司、雅虎公司和Google公司都先后被幸運地推到了浪尖。雖然,它們來自不同的領域,中間有些已經衰落或正在衰落,但是它們都極度輝煌過。吳軍的這本《浪潮之巔》系統地介紹了這些公司成功的本質原因及科技工業一百多年的發展。在這些公司興衰的背后,有著它必然的規律。《浪潮之巔》不僅講述科技工業的歷史,更重在揭示它的規律性。

更多計算機寶庫...

燃烧吧足球登陆