BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Servo:开源嵌入式浏览器引擎

| 作者 谢丽 关注 9 他的粉丝 发布于 2015年6月2日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

嵌入式浏览器引擎可以嵌入其它应用程序,像常规Web浏览器一样展示内容,并允许开发者自定义用户体验。Mike Blumenkrantz是Enlightenment的发布经理,同时也是EFL工具包的核心开发者。近日,他撰文介绍了由Mozilla基金会和三星共同推动的开源嵌入式浏览器引擎项目Servo。

许多公司都使用了Web内容嵌入技术。比如,Rhythmbox、Kate、Eclipse等流行Linux应用程序、Microsoft Entourage、Apple Mail for Mac、Adobe的产品以及Valve的Steam客户端等等。然而,向应用程序嵌入Web内容的API却很少,WebKit是最流行的一个。但它的问题是不稳定,开发者经常会因为需要与它的更新保持同步而不得不修改应用程序。Blink是WebKit的一个分支。它也有稳定性问题,而且只能用于C++。要解决这些问题,可以使用Chromium嵌入式框架(CEF)。该框架基于Blink浏览器引擎,但它实现了用户与底层引擎变化的隔离,并提供了基本的C API以及C++扩展。目前,Valve的Steam客户端以及Adobe的多种产品都使用了该API。

Servo浏览器引擎的目标是为开发者提供最大的灵活性。为了实现这个目的,它必须提供稳定的API和ABI。它使用Rust编写,这使它可以提供能够从C语言中直接调用的API。考虑到重新设计一个嵌入式Web API非常复杂,比如需要编写大量的文档,测试大量的框架以及大力的推广应用等,所以他们采用了一种不同的方式。

Servo实现了Chromium嵌入式框架的API。这意味着,正在使用CEF的开发者不需要对应用程序做任何修改就可以比较Blink和Servo引擎的性能,未来的开发者也不需要考虑另外一种浏览器API。这种实现方式主要包含两个方面的工作:

  • 确保“符号(Symbol)”完全覆盖:Servo嵌入式库可以钩连每个CEF函数调用。同时,任何时候分配的供外部使用的struct,其大小和成员位置必须与真正的CEF所分配的struct类似。符号列表可以借助Linux工具nm取得。
  • 尽可能准确的模拟每个方法调用的功能:这需要完全了解CEF的每个函数以及它如何连接到浏览器引擎。

目前,Servo尚处于起步阶段, 团队还非常小,项目还面临着一些问题,比如借助CEF提供的C++扩展跟踪C API执行。因此,Mike希望,感兴趣的开发者能够加入他们。更多信息请查看GitHub页面


感谢崔康对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT