衆所周知,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之前)各對象的創建
圖二:發起網絡請求(Request)之後各種對象的創建以及DOM樹的建立詳細情況
下一篇講講詞法分析器的工作過程。