3 Webkit2
3.1 Webkit2 架构及模块
相比于狭义的WebKit,WebKit2是一套全新的结构和接口,而并不是一个简单的升级版。Webkit2 的思想同 Chrominum 类似,就是将渲染过程放在单独的进程中来完成,独立于用户界面。
webKit2中也引入了插件进程,还引入了网络进程。“Web 进程”对应于 Chrominum 中的 Renderer进程,主要是渲染网页。“UI 进程”对应于 Chrominum 中的Browser 进程,接口就暴露在该进程中,应用程序(浏览器和使用者)调用该接口即可。
3.2 Webkit 和 Webkit2 嵌入式接口
Webkit 提供嵌入式接口,该接口表示其他程序可以将网页渲染嵌入在程序中作为其中的一部分,或者用户界面的一部分。对于WebKit的Chromium移植来说,它的接口主要用于Chromium浏览器,而不是嵌入式的使用方式。
在 Webkit 项目中,狭义 Webkit 的接口主要是与移植相关的 ewk_view 文件中的相关类。其主要思想是将网页的渲染结果作为用户界面的一个窗口部件,从这个角度上看,这跟其他的部件没有什么不同,区别在于它用来显示网页的内容。总结这些接口,按功能大致可以把所有接口分成6种类型:
- 加载网页、获取加载进度、停止加载、重新加载等
- 遍历前后浏览记录,可以前进、后退等
- 网页的很多设置,例如缩放、主题、背景、编码等
- 查找网页内容、高亮等
- 触控事件、鼠标事件处理
- 查看网页源代码、显示调试窗口等与开发者相关的接口。
这也式通常的嵌入式接口提供的功能,这些类型大概有180多个接口,非常之多。
Webkit2 接口不同于 Webkit 的接口,它们是不兼容的,不过目的都差不多,都是提供嵌入式的应用接口。WeKit2接口大致可以分为两个大的部分,下面仍以EFL的移植部分为例加以说明。
第一部分是WebView相关的接口,表示渲染的设置、渲染过程、界面等。其中大多数跟各个移植紧密相关,这里有三个主要的类,它们被各个移植所共享。
- WKView[Ref]: 表示的是一个与平台相关是视图,如在Windows上它表示的就是一个窗口的句柄。
- WKContextRef:所有页面的上下文,这些被共享的信息包括local storage、设置等。
- WKPageRef:表示网页,也就是浏览的基本单位。
虽然下面有大量跟移植相关的类,最主要的接口其实还是ewk_view,在EFL中,WebKit2的ewk_view接口同WebKit还是比较相似的,提供的功能也类似,都是一个能够渲染网页的窗口部件。但是,其接口比WebKit的部件少很多,去除一些不是很有用的接口,大概还有48个接口。接口类中还有很多其他跟移植相关的类,它们很多是为提供该窗口部件服务的,例如历史记录等。
第二部分是上面接口依赖的基础类,它们被各个移植所共享,既包括容器,字符串等基础类,也包括网页相关的基础类,例如URL、请求】网页设置等。
WebKit2还有一部分接口其实在Web进程里的,那就是WebBundle,其目的是让某些移植访问DOM,目前还没有明确的需求。
3,3 比较 Webkit2 和 Chrominum 的多进程模型
Webkit2 的多进程模型参考了 Chrominum 的模型和框架,也提供了多进程之上的接口层,但二者还是有一些区别的
Chrominum 使用的仍然是 Webkit 接口,而不是 Webkit2 接口,也就是说 Chrominum 是在 Webkit 接口之上构建的多进程架构。
Webkit2 的接口将多进程结构隐藏起来,这样可以让应用程序不必纠缠于内部的细节。但是,对 Chrominum 来说,它的主要目的时给 Chrominum 提供 Content 接口以便构建 Chrominum 浏览器,其本身目标不是提供嵌入式接口。
Chrominum 中每个进程都是从相同的二进制可执行文件启动,而基于 Webkit2 的进程则未必如此。