Introduce to WebKit2
来源:互联网 发布:音乐信息编辑软件 编辑:程序博客网 时间:2024/05/29 03:48
WebKit2是为WebKit引擎而设计的支持单独进程模型的API层。将Web的内容(Javascript,HTML,布局等)处理与应用程序UI分离,分别运行在两个不同的进程之中。这种分离的进程模型和Google的Chrome浏览器有几分类似,不同的是WebKit2将从引擎内部原生的支持这种多进程机制。通过将内容和展现相分离的方式,可以更加有效的提高浏览器的运行效率。
WebKit2提供了一套基于C语言的非阻塞API接口,为了实现WebKit2引擎中对这些API接口的非阻塞调用,WebKit2在设计的时候采用了以下几个方面的技术:
- 以通知的方式回调客户端函数(比如,didFinishLoadForFrame),通过这种机制可以告知client发生了什么事情(目前WebKit版本中也大量的使用了该技术,用来通知client事件的发生)
- 以策略方式回调客户端函数(比如,decidePolicyForNavigationAction),当引擎执行某一项操作时,通过该机制由实现具体功能的client来决定是否该操作被执行。
- 策略设置(例如WKContextSEtCacheModel, WKContextSetPopupPolicy),该机制允许client重新定义策略,而不需要再通过回调的方式访问UIProcess。
- 代码注入(例如,WebBundle),当所有其他的方法都无法完成时,可以通过代码注入的方式将代码载入到WebProcess中。不过按照WebKit官方文档所说,这个功能目前只是在计划中,还没有真正的在代码级实现。
WebKit的多进程架构
下图是之前webkit的进程架构图
从上图可以看到,之前的WebKit的ui进程和webkit内核进程都是运行在相同的进程空间。其中API Boundary表示和系统相关的api层,应用层使用webkit api使用webkit引擎,并且引擎使用该api访问系统资源。
接着,再看看新版的webkit2引擎的架构
从上图可以看到,webkit2将webkit引擎分成了2个部分,一个部分是和ui相关的操作,运行在一个进程中。而另外的webkit部分运行在独立的进程中。通过多进程机制的支持,增加了ui响应和引擎布的效率,同时也增强了系统的健壮性和安全性。
之前也提到,webkit2的多进程模型有点类似chrome的多进程模型,但是有一些不同之处,下图是chrome的进程模型:
从上图可以看到api bondary是在render进程的下方,也就是说ui绘制进程是在webkit框架之上扩展支持的。该部分的扩展是非webkit原生支持的,属于chromium代码的一部分,这导致无法在其他平台或者框架中支持多进程功能。
为了支持多进程的机制,在webkit中增加了两个新的子系统:
- CoreIPC:为消息传递和事件处理提供支持。
- DrawingArea:为交叉绘制区域提供了抽象。通过共享内存位图信息的方式,为多个进程绘制提供了支持。
目前,我只在Mac OS 10.6.3平台上编译并且体验了Webkit2,可以使用下面的方法加入多进程支持:
WebKitTools/Scripts/build-webkit –webkit2
- Introduce to WebKit2
- introduce to python
- Introduce to ArcSDE
- Introduce to AWK utility
- Introduce to AWK utility
- Introduce to AWK utility
- Introduce to GNU Binutils
- Introduce to crsctl
- To Introduce An Anime
- Introduce to C# anonymous methods
- Stanford--Introduce to Databases(1)
- Stanford--Introduce to Databases(2)
- Introduce to Java Programming:NOTE
- introduce
- Introduce
- introduce
- 【读书笔记】" An introduce to Unicode (chapter 2)
- Introduce to SQL Server 2005 Family
- javascript 处理大数字的解决方式(仅仅适合于加法减法运算)
- Java SE引路蜂地图开发示例
- 273.Like tree, like fruit.羊毛出在羊身上
- 伪ios新浪微博客户端(自家用)
- Java 中的关键字
- Introduce to WebKit2
- test
- 内联函数不能递归
- linux下oracle备份策略(rman)
- 274. Little things amuse little minds. 小人无大志
- 多重循环的退出问题 if-break
- vb.net生成exe之后,在其bin\Release目录下的exe点击无反应的解决办法(亲身实践)
- HDU-2846-Repository
- python + gtk 参考网站