標籤:write 建立 round handle 本地 factor col 引擎 很多
? ? ? ? 眾所周知,Webkit須要建立DOM樹。
為此它須要建立WebView, Chrome,Page,Frame, Document。 Document Parser, DOM Tree Builder(DOM樹的建造引擎)。ScriptRunner。 Resource Handle等等對象。?
? ? ? ? 同一時候,還須要建立為上面這些物件服務或者與之通訊的支援對象。比方:與本地表單相關的ChromeClient, 與FrameLoader事件相關的FrameLoaderClient,為Document服務的Document Loader、DocumentWriter及DocumentParser。 分析HTML頁面詞語的HTMLMetaChractorParser、HTMLTokenizer;文法分析器服務的HTMLParserScheduler。為DOM樹建立服務的HTMLConstrctionSite。為網路資源請求服務的ResourceLoader等等。
? ? ? ? 當然,除了這裡列出的對象之外,還有很多個物件比方SubResourceLoader等等沒有全列出。那麼,這麼多個物件是啥時候建立的呢?按時間排序,我把她們排列例如以下:
WebView->ChromeClient->Chrome->Page->FrameLoaderClient->FrameLoader->Frame->
PolicyChecker->DocumentLoader->DocumentWriter->Document->HTMLDocumentParser->
TextResourceDecoder->HTMLMetaChractorParser->HTMLTokenizer->HTMLScripRunner->HTMLParserScheduler->
HTMLTreeBuilder->HTMLConstructionSite->HTMLElementFactory->MainResourceLoader->ResourceHandle
? ? ? ? ?具體的建立細節我畫了兩個時序圖:
圖一:初始化時(發起網路請求Request之前)各對象的建立
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGljaHdlaTE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
圖二:發起網路請求(Request)之後各種對象的建立以及DOM樹的建立具體情況
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGljaHdlaTE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
? ? ? ? 下一篇講講詞法分析器的工作過程。
Webkit初始化以及載入URL過程中各種對象的建立時序以及DOM樹的建立詳情分析