编自http://www.chromium.org/blink

关于blink

Google Chrome/Chromium 从创始至今一直使用 WebKit(WebCore) 作为 HTML/CSS 渲染引擎。WebKit 早先由 Apple 由 KHTML 项目 fork 出来,用于 Safari 浏览器的 Web 引擎。由于宽松的协议、轻量级的设计和便捷的应用程序内嵌 API,WebKit 逐渐变得流行起来,除了 Google Chrome/Chromium 和 Safari,它在移动终端( Symbian S60,Android,iOS)到 Toolkit 集成(GTK+, Qt4) 都有不错的收获。

尽管上面一众经常被统称为 WebKit,实际上各自都使用了自己的 WebKit 分支或者编译时选项,使得最终的渲染结果也是存在一定的差异的。不过大体上 WebKit 社区内部还是比较和谐的,各个成员之间也为维持兼容性作出了努力,直到 2010 年随着 OS X Lion 一起面世的 WebKit2。由于 WebKit2 在 WebCore 层面上实现的进程隔离在一定程度上与 Google Chrome/Chromium 自己的沙箱设计存在冲突,故 Google Chrome/Chromium 一直停留在 WebKit,使用 Backport 的方式实现和主线 WebKit2 的兼容。显而易见这增加了 WebKit 和 Chromium 的复杂性,且在一定程度上影响了 Chromium 的架构移植工作。

基于以上原因,Google 决定从 WebKit fork 出自己的 Blink Web 引擎:

现阶段以精简内部结构为主,将删除大约 7000 个文件和 450 万行 WebKit2 兼容代码。

未来将着重改善 DOM 架构,将使用 JavaScript 实现 DOM。

提升安全性,实现进程外 iframes 。

对于今年初宣布放弃自有渲染引擎跟随 Chromium 的 Opera 来说,其开发者也立刻发布博客公告 Opera 亦将切换至 Blink 引擎。
[1]

谷歌Blink的横空出世将使它和其他的WebKit浏览器开发商包括——苹果、诺基亚和黑莓——更彻底地分道扬镳。
这一举措意味着,现在有四大渲染引擎在线:WebKit、Blink、Trident 和Gecko。对于用户来说,渲染引擎的差异化意味着他们在使用不同浏览器打开同一网页时将得到不同的结果——在移动设备上尤其如此。
谷歌并在一篇博客文章里写道:“我们知道,新的渲染引擎的出现将对网页浏览产生重大影响。”但谷歌补充说,它认为多个渲染引擎 “能够推动创新,并增进整个网络生态系统的健康。”
谷歌此举有很大风险。根据NetMarketShare的
数据,Chrome 浏览器目前是台式机最常用的浏览器之一。而根据Statcounter的统计,Chrome 浏览器目前是台式机最常用的浏览器。NetMarketShare统计的是访客数量,而Statcounter只统计点击量。如果谷歌的新战略不成功,Chrome 浏览器的统治地位或将不保。
Chrome 28开发版本的版本说明中还在使用WebKit,而最新的Chrome 28.0.1469.0中已经替换为Blink。

Blink 的架构变化

当chrome项目开始时,我们的目标是尽可能少的改动Webkit,易于同webkit的代码合并。

对于blink我们兴奋于创建一个更大的架构灵活性的代码,而无需担心其他webkit的用户。

我们计划增加一个 “out-of-process iframes”, 这将使chromium能够分离页面中一个独立的部分到一个分离的沙箱进程。

实现这一点需要大量改动webkit关于iframe的处理。

另外一个例子,我们将修复网络代码,让它更小更快。目前webkit中的网络代码受限于老的mac webkit API,而且不能改变。

chromium已经在其周边工作了很多年,但是这些周边的工作易碎而且bug很多。

在Blink中,我们将使用新的网络代码,而无需强制和其他webkit用户统一。

最后,我们甚至希望将整个DOM树用javascipt来实现。这将使javascript访问更加迅速。但是这需要大量重写Webkit DOM部分的实现。这也是Webkit同时支持两个javascript引擎更近困难。

我们考虑的其他的一些改变

  • 让WebCore支持多进程历史(当前,它假定同一个进程同步历史)
  • 删除Widget 树(Mac Webkit1的一个约束)
  • 分离WebCore到不同模块
  • 将直接使用沙箱平台的API,替代目前WebCore/Platform
  • Establish a simpler, stricter tree-gardening system that does not require 2 full time engineers per day (这句看不懂,谁能帮我翻译下?谢谢了)
  • 尝试将DOM 移动到JS的堆上
  • 增加多核复用(如 html 解析,style 引擎和javascript解析)
  • 移除DOM中模糊不清的部分和因为向后兼容而引起的模糊不清部分,或者移除不必要的兼容性
  • 使用现代的、更快的tcmalloc(google编写的多线程内存分配软件,替代malloc)来贯穿 Mac chrome
  • 尝试并行布局
  • 通过移除ScriptValue/ScriptState抽象来避免内存泄漏
  • 使用WebIDL来替代WebKitIDL,并移除Javascript绑定代码
  • 通过DOM3 Events/[DOM]UI Events提上WebCore速度

Blink: Chromium的新渲染引擎的更多相关文章

  1. 新渲染引擎、自定义设计和高质量用户体验的样例应用 Wonderous 现已开源

    探索世界奇观,并体验 Flutter 的强大之处. Flutter 的愿景是让你能够在空白画布上绘制出不受限制的精美应用.最近,通过与 gskinner 团队的通力合作,我们打造了一个全新的移动应用 ...

  2. 【repost】浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...

  3. 浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎: fire ...

  4. 【转】浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...

  5. BOM 浏览器对象模型_渲染引擎_JavaScript 引擎_网页加载流程

    1. 浏览器核心的两个组成部分 渲染引擎 将网页代码渲染为用户视觉可以感知的平面文档 分类: Firefox        Gecko 引擎 Safari        WebKit 引擎 Chrom ...

  6. 浏览器内核、渲染引擎、JS引擎简介

    一.定义 浏览器内核分成两部分:渲染引擎和JS引擎. 由于JS引擎越来越独立,浏览器内核 就倾向于 单指 渲染引擎.  渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具.(说白了,就是按照 ...

  7. Chromium硬件加速渲染的UI合成过程分析

    在Chromium中.Render端和WebGL端绘制出来的UI终于是通过Browser端显示在屏幕上的.换句话说.就是Browser端负责合成Render端和WebGL端的UI.这涉及到不同Open ...

  8. Outlook HTML渲染引擎

    OutLook始终不离不弃 是不是很讨厌为Email代码兼容Outlook? 太遗憾了!虽然光都有尽头,但Outlook始终存在. 为了应付Email的怪癖,我们花了很多时间测试,确保我们搞定了所有O ...

  9. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开发复杂性 ...

随机推荐

  1. HealthKit教程 Swift版:锻炼信息

    原文:HealthKit Tutorial with Swift: Workouts 作者:Ernesto García 译者:Mr_cyz ) 欢迎回到我们的HealthKit系列教程! 在我们系列 ...

  2. 【源代码】基于Android和蓝牙的单片机温度採集系统

    如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例- 基于And ...

  3. If-Modified-Since页面是否更新

    第一次先请求某个网页,抓取到本地,假设文件名为 a.html.这时文件系统有个文件的修改时间. 第二次访问网页,如果发现本地已经有了 a.html,则向服务器发送一个 If-Modified-Sinc ...

  4. JEECG开源团队招募新成员 2014年

    JEECG开源团队招募新成员 2014年 截止日期:2014-06-01        JEECG开源项目 是一款基于代码生成器的微云高速开发平台.提供企业高速开发和採用微信实现移动应用的解决方式.J ...

  5. 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule

    双调欧几里得旅行商问题是一个经典动态规划问题.<算法导论(第二版)>思考题15-1和北京大学OJ2677都出现了这个题目. 旅行商问题描写叙述:平面上n个点,确定一条连接各点的最短闭合旅程 ...

  6. Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click

    Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件.当点击目标DOM元素时触发ViewModel的对应方法.例如: 使用Click绑定 1 <div id=&q ...

  7. c++重载ostream的实现

    #include <iostream> using namespace std; class Point{ public: Point(int _x = 0, int _y = 0, in ...

  8. zoj 2972 - Hurdles of 110m

    题目:110米栏,运动员能够用三种状态跑,1状态耗体力且跑得快,2状态不消耗体力,3状态恢复体力且跑得慢. 体力上限是M,且初始满体力,如今想知到最小的时间跑全然程. 分析:dp,全然背包.题目是一个 ...

  9. Invalid embedded descriptor for ".proto".Dependencies passed (Protobufer)解决办法

    前言 之前开发的时候,发现居然出现了Dependencies passed to FileDescriptor.buildFrom() don't match those listed in the ...

  10. 最经常使用的两种C++序列化方案的使用心得(protobuf和boost serialization)

    导读 1. 什么是序列化? 2. 为什么要序列化?优点在哪里? 3. C++对象序列化的四种方法 4. 最经常使用的两种序列化方案使用心得 正文 1. 什么是序列化? 程序猿在编写应用程序的时候往往须 ...