首页 WebKit分析报告II.pdf

WebKit分析报告II.pdf

WebKit分析报告II.pdf

上传者: 太极王 2011-11-03 评分1 评论0 下载411 收藏0 阅读量970 暂无简介 简介 举报

简介:本文档为《WebKit分析报告IIpdf》,可适用于IT书籍领域,主题内容包含第页Webkit分析报告II侯侯侯侯炯炯炯炯二零零九年二月十日二零零九年二月十日二零零九年二月十日二零零九年二月十日第页导言导言导言导言相信大家读完符等。

第页Webkit分析报告II侯侯侯侯炯炯炯炯二零零九年二月十日二零零九年二月十日二零零九年二月十日二零零九年二月十日第页导言导言导言导言相信大家读完《WebKit分析报告》对浏览器的现状和发展有了一定的了解并对WebKit有了初步印象更能编译运行webkit。这里为了更好的对webkit进行进行深入的了解我们将对WebKit的框架和流程进一步分析并对WebKit部分代码进行分析。WebKit框架比较简单但内容很复杂而其在不断的修改完善。并且很多技术有待讨论新的技术也在不断引进。希望该文章对你的有用。欢迎来信讨论(houjiongcom)。第页目目目目录录录录IWebKit介绍一WebKit是什么?二WebKit主要特点和目标三WebKit主要组成IIWebKit之WebCore介绍一WebCore所包含的主要内容目录结构主要数据结构二一个Http请求在WebCore中的主要流程WebKit工作流程处理流程代码流程三网络库、图形库、Javascript实现与WebCore的集成IIIWebKit之Port介绍一有关Port方面的概述二WebKitPort移植实现分析WebCore交互接口连接模块loader显示模块WebView和WebFrameChrome中对Port移植方面的实现Android中对Port移植方面的实现结论三如何利用WebKit利用WebKit实现搜索引擎利用WebKit实现平台功能高性能的渲染工具IVWebKit之图形库介绍一WebKit与图形库二图形库概述及其主要功能三WebKit与Cario四WebKit如何支持不同图形库的实现五WebKitDPort实现六总结VWebKit之网络库介绍一网络原理超文本传输协议URL类Page类与服务器的连接二WebKit与CURL网络库第页VIWebKit之DOM分析一DOM原理DocView模型抽象网页表示DOM解析基本算法二WebKitDOM代码解析流程VIIWebKit之布局分析一基本概念CSS布局相关标准介绍布局页面的基本概念如何确定页面元素显示位置如何确定页面元素大小如何理解zindex的使用总结二WebKit主要布局框架基类RenderObject子类RenderBox子类RenderContainer子类RenderFlow子类RenderBlock子类RenderInline子类RenderText子类RenderImage子类RenderView子类RenderButton子类RenderTextControl子类RenderListBox子类RenderTheme子类RenderTable、RenderTableRow、RenderTableCol、RenderTableCell子类RenderFrame三CSS属性的描述RenderStyle类RenderStyle类主要方法四RenderObject及子类对象的生成CSSParserCSSStyleSelector类构建Render树五Render树与RenderLayer树构建Render树的基本实现流程RenderLayer类分析构建RenderLayer树RenderLayer树与Render树的关系RenderLayer树的作用第页IIIIWebKitWebKitWebKitWebKit介绍介绍介绍介绍一一一一WebKitWebKitWebKitWebKit是什么是什么是什么是什么????WebKit的前身是KDE小组的KHTML。Apple将KHTML发扬光大推出了装备KHTML改进型的WebKit引擎的浏览器Safari获得了非常好的反响。WebKit引擎比Gecko引擎更受程序员欢迎的原因除了其引擎的高效稳定兼容性好外其源码结构清晰易于维护是一个重要的原因。现在浏览器的内核引擎基本上是三分天下:Trident:IE以Trident作为内核引擎。Gecko:Firefox是基于Gecko开发。WebKit:Safari,GoogleChrome基于Webkit开发。WebKit内核在手机上的应用十分广泛例如Google的手机Gphone、Apple的iPhone,Nokia’sSeriesbrowser等所使用的Browser内核引擎都是基于WebKit。二二二二WebKitWebKitWebKitWebKit主要特点和目标主要特点和目标主要特点和目标主要特点和目标引擎引擎引擎引擎该项目的主要重点是内容部署在万维网上的基于标准的技术如HTMLCSSJavaScript和DOM中。并能够嵌入WebKit在其他应用程序中并用它作为一般用途的显示和交互引擎。开源开源开源开源第页WebKit应继续自由使用的两个开源和专有应用。高性能高性能高性能高性能维持和改善的速度和内存使用是一个重要的目标。随着网页内容越来越丰富越来越复杂作为网络浏览器上运行的更有限的设备需要提升性能提升加快浏览速度。可移植性性可移植性性可移植性性可移植性性该WebKit项目力求解决各种需要。能把WebKit移植到各种各样的台式机移动嵌入式和其他平台。WebKit将提供必要的基础设施做到这一点紧张平台集成重用本地平台服务并酌情提供友好嵌入的API。兼容性兼容性兼容性兼容性为用户浏览网页兼容现有的网站是必不可少的。我们致力于维护和改善兼容现有的网络内容有时甚至不惜牺牲标准。我们利用回归测试以保持我们的兼容性收益。遵守标准遵守标准遵守标准遵守标准WebKit的目标是遵守有关的Web标准并支持新的标准安全安全安全安全保护用户安全的行为是至关重要的。迅速修复安全问题以保护用户和维护他们的信任。专注专注专注专注WebKit是一个引擎而不是浏览器。WebKit小组不打算开发或举办一个全功能的网络浏览器基于第页WebKit。而只是一个引擎WebKit小组专注于网站的内容而不是全面的解决方案需要每一个想象的技术。三三三三WebKitWebKitWebKitWebKit主要组成主要组成主要组成主要组成WebKit主要包括三个部分WebCore、JavascriptCore及Ports部分。WebKit专注的核心部分主要是:分析Html,Javascript的解析和布局渲染技术。分别在WebCorehtmlJavascriptCore和WebCorerendering里面。IIIIIIIIWebKitWebKitWebKitWebKit之之之之WebCoreWebCoreWebCoreWebCore介绍介绍介绍介绍一一一一WebCoreWebCoreWebCoreWebCore所包含的主要内容所包含的主要内容所包含的主要内容所包含的主要内容目录结构目录结构目录结构目录结构从源代码目录结构来看WebCore目录主要包括如下目录:bindingsbindingsbindingsbindings将DomBinding给JavascriptCore方面的代码同时包含依据idl接口描述文件自动生成对应于JavascriptCore的Binding实现的脚本等内容bridgebridgebridgebridge第页主要包含NPPlugin方面的接口访问等内容csscsscsscss主要包括与css方面相关的内容如解析、不同css规则的定义与实现、cssBinding给JS的接口定义等内容domdomdomdom主要包括dom方面相关的内容如不同dom元素的定义与实现、domBinding给JS的接口定义等内容htmhtmhtmhtmllll关于html方面相关的内容如不同html元素的定义与实现、HTMLTokenizer及HTMLParser等内容。loaderloaderloaderloader主要包括装载资源如html页面、css、js及image等方面内容pagepagepagepage主要包括描述一个Web页面所涉及的内容如page、frame、frameview、frametree、setting、history、chrome、chromeclient等内容renderingrenderingrenderingrendering主要包括如何使用样式组织布局、显示html元素等方面内容pluginspluginspluginsplugins主要包括浏览端如何实现NPPlugin方面的内容svgsvgsvgsvg主要包括与svg方面相关的内容第页xmlxmlxmlxml主要包括与xml方面相关的内容如xmlparser、XPath、XSLT等platformplatformplatformplatform主要包括与不同平台或外部库相关的内容如graphics(图形输出方面)、network(网络处理方面)、imagedecoders(解析不同图片格式方面)等。主要数据结构主要数据结构主要数据结构主要数据结构为了更加简单有效的描述浏览网页的内容及过程WebKit为了明显区分不同方面的内容采取了不同的namespace如webcore、javascriptcore、webkit等webcore方面的主要数据结构有:webcore::page、webcore::frame、webcore::FrameLoader、webcore::FrameView、Document、DOMWindow、KJSProxy、DocumentLoader、ResourceHandle、ResourceRequest、ResouceResponse、MainResourceLoader、RenderObject、RenderView等主要数据结构描述如下:WebViewWebViewWebViewWebView及及及及WebFrameWebFrameWebFrameWebFrame与与与与pagepagepagepage、、、、frameframeframeframe之间的关系之间的关系之间的关系之间的关系第页FrameLoaderFrameLoaderFrameLoaderFrameLoader、、、、DocumentLoaderDocumentLoaderDocumentLoaderDocumentLoader、、、、DocLoaderDocLoaderDocLoaderDocLoader类结构类结构类结构类结构第页主要主要主要主要DocumentDocumentDocumentDocument类结构类结构类结构类结构第页第页FrameViewFrameViewFrameViewFrameView类主要结构类主要结构类主要结构类主要结构总的说来WebCore包含了浏览器引擎的核心部分如处理html、dom、css、svg、获取资源、渲染页面过程控制、回调通知外壳程序以及与Javascript实现的Binding等等二二二二一个一个一个一个HttpHttpHttpHttp请求在请求在请求在请求在WebCoreWebCoreWebCoreWebCore中的主要流程中的主要流程中的主要流程中的主要流程WebKitWebKitWebKitWebKit工作流工作流工作流工作流程程程程第页流程:用户向Shell发出页面请求后页面的URL或本地文件名被发送到ShellShell调用IO组件把URL传达到IO组件IO组件使用HTTP协议或再调用本地IO获取HTMLXHTML源数据返回ShellShell把IO返回的HTMLXHTMLsource提交HTMLXHTML分析器HTMLXHTML分析器分析HTMLXHTML代码构建一棵DOM树树根为HTMLDocument通过DOM树生成Render树也许对于Render树大家不那么了解了简单的说来它是对DOM树更进一步的描述其描述的内容主要与布局渲染等CSS相关属性如left、top、width、height、color、Layout根据Render树在画布上layout对应的控件Build通过DOM生成Render树树树树ParserHTMLXHTML解析生成DOM树IOHTTP本地IO请求RunScriptJavaScriptVBScriptShell主控制者UserEvent用户打开网页操作点击事件等第页font等有关因为不同的DOM树结点可能会有不同的布局渲染属性甚至布局时会按照标准动态生成一些匿名节点所以为了更加方便的描述布局及渲染WebKit内核又生成一颗Render树来描述DOM树的布局渲染等特性当然DOM树与Render树不是一一对应但可以相互关联。布局器布局现实出来。当布局管理器对可视化元素指派好位置大小后它就就知道了它的安身之处也记住了它的大小它必须要严格遵守布局管理器给它分配的位置大小不能擅自更改。既然知道了自己的位置大小剩下的就是控件根据自己的属性进行表现自己了背景外形等。处理流程处理流程处理流程处理流程第页第页流程:通过向服务器发送请求服务器通过请求发给客户端html的内容浏览器通过WC规范把接受到的内容解析成DOM树在解析DOM树的同时会生成对应的Render树。布局管理器通过Render树开始布局。这个是一个动态的过程DOM在这个时候会继续向服务器申请自己需要的东西比如CSS,JavaScript图片等。然后布局器动态的加载或布局。这样可以改善用户的使用。最后把整个网页的render出来。第页代码流程代码流程代码流程代码流程、当调用webkitwebviewopen(url)时会触发core(webView)>mainFrame()>loader()>load(uri)(即调用FrameLoaderload)来发起一个Http页面请求FrameLoaderload方法的主要处理过程如图:第页第页、一旦发起ResourceHandle::start就会由网络库向web服务器发起一个http请求、而MainResourceLoader作为一个ResouceHandleClient提供了诸如didReceiveData()、didReceiveResponse()等回调接口以供网络库调用一旦从web服务器获得相关数据后网络库部分则会调用相关接口如didReceiveData等、MainResouceLoader::didReceiveData的主要回调处理过程如下图:第页第页、通过回调didReceiveData()方法进而调用Nodeattach()方法这样就会解析生成document同时会创建frameview、domwindow等、创建的frameview会触发layoutTimerFired时间Timer进而调用layout()方法从而触发RenderObject的创建、布局等同时或许会invalidateRect进而触发操作系统图形库的paint消息事件、由程序主消息处理循环接收paint消息事件进而获取对应frame获取或创建GraphicContext然后调用frame>view()>paint(ctx,)从而触发对应RenderObject树进行重画处理这样一个完整的页面就会逐步的显示出来。三三三三网络库网络库网络库网络库、、、、图形库图形库图形库图形库、、、、JavascriptJavascriptJavascriptJavascript实现与实现与实现与实现与WebCoreWebCoreWebCoreWebCore的集成的集成的集成的集成为方便扩展及模块化WebCore在处理浏览页面的过程中往往使用了类似java或gecko中接口的概念一般先定义一组公共接口或基类然后由不同模块来实现。如网络处理部分由WebCore提供一个ResourceHandle类而在不同的目录如cf、curl、qt、soup、win等中在不同网络库的支持下对ResourceHandle类提供不同的实现待编译时择机选择对应目录下的实现这种方式从架构的角度看比较简单但往往不能让程序同时使用多个网络库进而由程序动态切换使用不同网络库实现而gecko在xpcom的基础上提供了对于这种扩展形式的支持其中Chrome对ResouceHanle类的实现基于WinHttp网络库。同样WebCore对图形库的集成也是采取这种方式来实现如第页由WebCore提供一个GraphicsContext类然后在不同的目录如cairo、cg、qt、win、wx中在不同的图形库支持下对GraphicsContext提供不同的实现。其中Chrome对GraphicsContext类的实现基于Skia图形库。WebCore中实现的dom、html、svg、css等往往需要通过一定的方式输出给Javascript的实现如JavascriptCore、V以便JSEngineer能认识这些dom元素等并且能调用其中的方法这种方式叫做Binding为了便于将WebCore中相对固定的dom、html、svg、css接口等极其方便的Binding出去WebKit使用了极其高效及神奇的方式来实现。IIIIIIIIIIIIWebKitWebKitWebKitWebKit之之之之PortPortPortPort介绍介绍介绍介绍一一一一有关有关有关有关PortPortPortPort方面的概述方面的概述方面的概述方面的概述WebKitPort方面的内容是可以很广的例如可将不同的图形库、网络库与WebCore集成提供不同的Port接口供外部程序使用等例如同样在windows平台上可以运行的GoogleChrome和Safari就是针对WebKit的不同移植。我们想了解有关Port方面的主要内容在于提供不同的Port接口供外部程序使用以及如何与外部程序交互因为WebKit中的其它两部分WebCore、Javascript实现从逻辑上讲是不直接提供接口给外部程序使用的。同时为了完成浏览器的核心功能WebKit也需第页要从外部程序中通过Port接口的方式获取一些支持。从这个角度讲WebKit作为一个相对独立的整体它与外部程序之间的交互也就有一组相对固定的接口来定义及维护它们之间的关系它们之间的关系与插件跟浏览器引擎之间的关系完全类似接口相当一组协议有的是由WebKit来实现而供外部程序调用有的的正好相反。通过前面的了解我们知道WebKit的主要功能集中在分析Html、渲染布局Web内容以及Javascript实现方面等而这些Web内容显示在哪个窗口及消息处理的启动循环等都需要由外部程序来提供。二二二二WebKitPortWebKitPortWebKitPortWebKitPort移植实现移植实现移植实现移植实现分析分析分析分析WebCoreWebCoreWebCoreWebCore交互接口交互接口交互接口交互接口在WebKit源代码目录结构中WebKit目录下分别包含gtk、mac、qt、win、wx目录其分别对应不同的Port移植方式在每一个目录下面都包括WebCoreSupport目录而在不同的WebCoreSupport目录下分别包含有对类接口WebCore::ChromeClient、WebCore::ContextMenuClient、WebCore::DragClient、WebCore::EditorClient、WebCore::FrameLoaderClient、WebCore::InspectorClient等的实现它们代表外部程序提供给WebKit内部使用的接口实现其中WebCore::ChromeClient、WebCore::FrameLoaderClient非常重要。初步了解其接口定义能基本了解其对应的含义这些接口往往需第页要由Port移植部分来提供实现往往由WebKit内部根据一定的条件来调用。下面初步来了解几个主要接口:WebCore::ChromeClientWebCore::ChromeClientWebCore::ChromeClientWebCore::ChromeClient接口接口接口接口::::往往在运行windowopen脚本时调用以便由外部程序决定如何打开一个新页面如新建、一个窗口、新建一个Tab页签等virtualWebCore::Page*createWindow(WebCore::Frame*,constWebCore::FrameLoadRequest,constWebCore::WindowFeatures)通知外部程序显示页面virtualvoidshow()virtualboolcanRunModal()通知外部程序以Modal的方式显示页面virtualvoidrunModal()通知外部程序显示JS警告提示窗口virtualvoidrunJavaScriptAlert(WebCore::Frame*,constWebCore::String)通知外部程序显示JS警告确认窗口virtualboolrunJavaScriptConfirm(WebCore::Frame*,constWebCore::String)WebCore::FrameLoaderClient接口:检查是否拥有主页面窗口virtualboolhasWebView()const检查是否拥有页面窗口virtualboolhasFrameView()const通知外部程序有关http请求开始、结束、获取数据等如通常浏览器状态栏显示的信息virtualvoiddispatchDidReceiveResponse(WebCore::DocumentLoader*,unsignedlongidentifier,constWebCore::ResourceResponse)virtualvoiddispatchDidReceiveContentLength(WebCore::DocumentLoader*,unsignedlongidentifier,intlengthReceived)virtualvoiddispatchDidFinishLoading(WebCore::DocumentLoader*,unsignedlongidentifier)virtualvoiddispatchDidFailLoading(WebCore::Docum

职业精品

著名跑车营销战略分析.doc

网络营销常见6大促销策略.doc

体育产品定价策略.doc

第15章-国际市场分销渠道策略.ppt

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 98
所需积分:0 立即下载

意见
反馈

返回
顶部