在我职业生涯初期,当我在代理机构工作,后来在微软的 Edge 团队工作时,我一遍又一遍地听到同样的抱怨:“啊,为什么 Edge 不直接使用 Blink?那样我就可以访问所有我想使用的 API,并且只需要在一个浏览器中测试!”
让我明确一点:一个只运行在 Chrome 引擎 Blink 及其衍生产品上的互联网,并不是我们想象中的天堂。
作为一名 Google 开发者专家,我曾参与过 Microsoft Edge、Firefox 和 W3C 的工作(作为受邀专家),我对这个话题有一些看法(以及一些事实)。让我们开始吧。
浏览器到底是什么?
让我们澄清一些术语。
您今天所熟知的流行浏览器包括 Google Chrome、Apple Safari、Mozilla Firefox 和 Microsoft Edge,但在过去,我们也曾拥有过像 NCSA Mosaic 和 Netscape Navigator 这样优秀的浏览器。无论您每天使用哪个浏览器(我使用 Firefox,谢谢您的询问),它都只是一个包裹在浏览器引擎周围的界面层。您所有的书签、前进和后退箭头、那个 URL 地址栏——这些 *都不是浏览器*。这些是浏览器的界面。通常构建浏览器引擎的人员甚至从未接触过界面!
浏览器引擎是真正读取所有通过互联网下载的 HTML、CSS 和 JavaScript,解释它们,并为您显示网页漂亮图片的东西。它们有自己的名称。Chrome 的引擎是 Blink。Safari 运行在 WebKit 上。Firefox 使用 Gecko。Edge 位于 EdgeHTML 之上。(我喜欢这种命名约定。干得好,Edge。)
除了 Edge 之外,所有这些引擎都是开源的,这意味着任何人都可以获取一个,将其包装在一个新的界面中,然后,发布他们自己的浏览器——也许具有不同的(可能更好的)用户体验——而这正是某些浏览器的做法!Apple 仅允许在其 iOS 应用商店中使用基于 WebKit 的浏览器,因此 iPad 和 iPhone 上的 Chrome、Firefox 甚至 Edge 浏览器更像是 Safari 而不是其桌面版本。Oculus Browser、Brave、Vivaldi、Samsung Internet、Amazon 的 Silk 和 Opera 都运行在 Blink 上。我们称它们为“基于 Chromium 的浏览器”——Chromium 是 Google 的 开源项目,Chrome 及其引擎由此诞生。
但是浏览器引擎内部是什么?更多引擎!每个浏览器引擎都由其他几个引擎组成。
- 布局和渲染引擎(通常紧密耦合,没有区别)计算页面应该是什么样子,并处理任何绘制、渲染,甚至动画。
- JavaScript 引擎,它本身就是一个独立的东西,甚至可以独立于浏览器运行。例如,您可以使用 Chrome 的 V8 引擎或 Microsoft Edge 的 Chakra 在服务器上运行 Node。

我喜欢将浏览器引擎比作生物细胞。细胞包含许多细胞器来执行不同的功能,浏览器也是如此。可以将细胞核视为渲染引擎,包含页面应该如何显示的蓝图,将线粒体视为 JavaScript 引擎,为我们的日常交互提供动力。(有趣的事实:线粒体曾经也是独立的细胞,而且它们甚至携带 *自己的 DNA*!)
而且你知道吗?浏览器像生物一样进化,这也是它们与生物相似的地方之一。
浏览器进化
当第一个浏览器问世时,那是一个更简单的时代。CSS 在 1996 年首次出现在 Microsoft Internet Explorer 3 中时被认为是热门的新事物!与今天相比,当时要实现的 JavaScript API 和 CSS 规范要少得多。多年来,浏览器代码库已经发展壮大,以支持用户和开发者构建现代网络体验所需的大量新功能。这是用户需求、浏览器工程工作和规范标准化流程之间的一种微妙演变。
我们现在有三个主要的引擎分支。
- WebKit 和 Blink(Blink 最初是 WebKit 的分支)分别运行 Safari、Chrome 和 Opera
- Gecko 运行 Firefox
- EdgeHTML(Trident 的分支,也称为 MSHTML)运行 Microsoft Edge
每一个都非常不同,并且有不同的优缺点。每个引擎都可能单独将网络引向不同的方向:Firefox 的引擎具有 Servo 的多线程处理 功能,可以渲染超快速的图形。Edge 的引擎与操作系统的抽象程度最低,使其能够更直接地访问系统资源——但结果也使其成为仅限 Windows 的浏览器引擎。而 Chrome 的 Blink 拥有最多的 Web 开发人员对其进行测试。(我稍后会回到为什么这是一个“功能”)。
还记得我们讨论过的所有基于 Chromium 的浏览器吗?好吧,这些浏览器都不需要从头开始构建它们的渲染引擎或 JavaScript 引擎:它们只是搭载在 Blink 上。如果它们需要新的功能?它们可以开发这些功能并将其保留给自己,或者可以将这些功能“上游”共享,使之成为核心引擎的一部分,供其他浏览器使用。(这个过程通常充满了政治和后勤问题——“回馈贡献”说起来容易 如是说,做起来难 如是做!)

很难想象任何一个实体能够证明从头开始创建浏览器引擎所需的时间和费用是合理的。即使是当前的三个引擎家族,也是从互联网诞生之初就存在的引擎的演变。它们与我们一起逐步发展,成长以满足我们的需求。
目前,网络上的绝大多数流量都发生在 Chrome、iOS Safari 或 Blink 或 WebKit 的其他变体上。
分支、翻新和彻底改造
一些开发者会说,WebKit 和 Blink 很久以前就分叉了,以至于这两个现在实际上是完全不同的浏览器引擎,不再能够共享贡献。这在某种程度上可能是正确的。但是,虽然常见的烟囱雨燕和红喉蜂鸟在彼此之间是完全不同的动物,但与其他动物科相比,它们仍然非常像鸟类。它们的近亲后代在不久的将来不太可能长出牙齿、手或尾巴。WebKit 和 Blink 都没有 Gecko 和 EdgeHTML 多年来一直在构建的处理功能。
其他开发者可能会指出,Microsoft Edge 据说是 Internet Explorer 的“完全重写”。但是,“彻底改造”和“简单翻新”之间的区别可能只是视角问题。EdgeHTML 是 Internet Explorer 的 Trident 引擎 的分支,并且它仍然带有 Trident 的 大量遗留问题。
浏览器灭绝
所以,我们有三个浏览器引擎:WebKit/Blink、Gecko 和 EdgeHTML。在可预见的未来,我们不太可能出现任何新的血统。就是这样。
如果我们失去其中一个浏览器引擎,我们将失去其血统、该引擎的所有后续排列,以及它可能允许的网络的独特呈现方式。
而且它不太可能被取代。

想象一个只有蜂鸟、海豚和马的星球。假设所有海豚都灭绝了。在遥远的未来,蜂鸟或马可能会进化成某种可以在海洋中像海豚一样游泳的东西。事实上,在恐龙时代,鱼龙 看起来非常像海豚。但是,这种生物将与真正的海豚大不相同:即使是鱼龙也从未进化出回声定位。我们将等待很长时间(可能永远),才能让一个血统进化出我们今天在其他血统中已经存在的特征。那么,为什么我们能够袖手旁观,甚至鼓励这些宝贵、独特的血统之一灭绝呢?
我们已经失去了一个。
我们曾经有四个主要的渲染引擎,但在采用 Blink 之前,Opera 中止了其自己的渲染引擎 Presto 的开发。
还剩下三个。明智地利用它们。
凭借我们共同的力量……
有些人认为,如果像 Microsoft Edge 这样的浏览器运行在 Blink 上,那么 Microsoft 的工程师就可以帮助构建一个更好的 Blink,并将新功能贡献到上游,让所有其他 Chromium 浏览器从中受益。这听起来很合理,对吧?
但请记住,Blink 是从 WebKit 分叉出来的。现在有 WebKit 贡献者和 Blink 贡献者,他们的贡献并不一一对应。像 Microsoft 这样的公司不太可能像 Samsung 和 Occulus 一样,希望以与 Google 不同的方式使用引擎。如果这些差异不一致,该公司将开发一个并行的代码库,而不是将这些工作贡献到上游。我们最终会得到一个 WebKit 和一个 Blink——但缺少了来自一个已经与互联网一起发展了几十年的代码库的深度差异。
从理论上讲,这是一个不错的想法。但在实践中,我们最终会陷入类似的困境——并且浏览器引擎生态系统中的“基因多样性”减少了。
竞争关乎成长,而非“胜利”
我是一个竞争的拥护者。与其他漫画家竞争,创作更好的漫画并接触更广泛的受众,让我取得了今天的成就。(真实故事:我的起点是作为一名漫画家,构建自己的社区网站、新闻通讯和购物车。)我想提醒大家,竞争并非要消灭你的竞争对手。如果你这么做了,你就会停滞不前并失去你的受众:参见 Internet Explorer 6。
Internet Explorer 6 在推出时是一款很棒的浏览器:性能足以真正实现 Internet Explorer 早期版本引入的功能,例如 DOM、数据绑定和异步 JavaScript。它的竞争对手 Netscape Navigator 无法匹敌,最终灰飞烟灭(后来其引擎 Gecko 由 Mozilla 基金会从头重写——它很小!——并重新诞生为 Firefox)。
微软认为自己已经赢得了互联网,于是将注意力转向其他领域,而 Internet Explorer 并没有取得太大进步。这使得 Firefox 抓住了一个机会——通过为用户提供更好的体验,例如弹出窗口拦截和更好的用户界面。(那个界面层确实很重要!)Firefox 还与 Opera 合作推动了 Web 标准的发展,而在 IE 与 Netscape 的时代,Web 标准并不是什么重要的事情。使用和构建互联网的人们非常喜欢它,Firefox 就像火一样()通过口碑和草根推广活动迅速传播开来。
当 iPhone 推出时,苹果专注于其盈利的应用商店,并减少了对 Flash 的支持——Web 上最类似于应用的交互平台。应用为内容创作者提供了一种通过广告模式以外的方式来获利的方法。广告是 Google 的主要收入来源,随着仅使用互联网进行数据传输的封闭式应用花园的威胁出现,Google 开始感到担忧。与此同时,微软正忙于构建自己的移动操作系统。因此,Google 做了两件事:Android 和 Chrome。
Chrome 承诺提供更出色、更快的浏览体验。它非常基础,但 Google 甚至不遗余力地请到著名的(至少在我的圈子里)漫画家 Scott McCloud 来创作漫画向用户解释浏览器的使命。凭借 Chrome 在每个操作系统和 Android 手机上的无处不在,其开发工具以 Firefox 受欢迎的 Firebug 扩展为模型,以及日益增长的规范参与度,Chrome 不仅将 Internet Explorer 从沉睡中唤醒,而且几乎要消灭地球上所有其他浏览器引擎!
将浏览器这个庞大的家族树(或者说是灌木丛)修剪成单一的分支,让人联想到脆弱的单一栽培。单一栽培很容易受到环境和生态挑战的干扰——受到市场和人口变化的影响。当下一个对 Web 的威胁出现时会发生什么,但我们却没有 Firefox 的多线程?或者 Microsoft Edge 的系统集成?如果没有它们,我们能否快速迭代?或者我们会指望 Chrome 开发人员做些什么,并祈祷他们不会像微软一样在“赢得 Web”后转向处理其他事务而变得停滞不前。
具有讽刺意味的是,Google 创建 Chrome 的目的是为了防止 Web 输给应用模式,但它本身却像 Internet Explorer 6 一样垄断了 Web 开发。

成为王者(丛林之王)的感觉真好
我承诺过我会回到“用户基础规模作为一项功能”这个话题。让绝大多数 Web 开发社区为你的平台构建和测试,这是一个巨大的竞争优势。首先,你保证大多数网站都将在你的浏览器中完美运行——你无需花费太多时间和精力去提醒财富 500 强企业注意那个导致所有内部用户切换到你的竞争对手浏览器并一去不复返的奇怪错误。用户减少导致开发者测试减少,进而导致用户进一步减少,这是一个难以扭转的负面循环。
它还使得提出新的规范变得更加容易,这些规范可以服务于你的母公司的目标(这可能服务于也可能不服务于 Web 社区的目标),并且可以让这个庞大的开发者社区首先根据你的实现进行构建,而无需等待其他浏览器赶上来。如果一个较小的浏览器提出一个没人注意到的规范,而你恰好需要它并采用了它,人们会将其视为你的功劳,无论是有意还是无意,都会继续增强你的品牌影响力。
这给竞争对手带来了下行压力,他们根本没有或无法使用最大的浏览器团队所拥有的相同资源。这是一种残酷而高效的方法,无论是有意还是无意。
这是否符合道德?在个人贡献者层面,是的。这是否是一个恶性循环,公司通过迫使竞争对手花费有限的资源来追赶,从而将其淘汰?也是的。拥有众多的人为你的平台构建内容也会有所帮助。
所有参与其中的敬业、善意、真正热心的个人——从 Chrome 团队到 Web 开发人员——都可以举起手来,理直气壮地说:“我只是想推动 Web 的发展!”,同时却助长了企业垄断。
Chrome 拥有最多的资源,并在推动 Web 向前发展方面处于领先地位,以至于我们无法确定我们是在构建我们想要的 Web……还是Google 想要的 Web。
推测生物学
曾经有一段时间,微软帮助苹果渡过难关,当时苹果濒临破产。这并不是因为比尔·盖茨和史蒂夫·乔布斯是朋友——不,微软需要苹果成功,这样操作系统才能保持竞争。(任何企业都不想被视为垄断企业!)
但是,想象一下,如果苹果真的倒闭了。如果我们只剩下 Linux 和 Windows,今天的个人电脑会是什么样子?如果没有苹果参与 iPhone 的研发,移动计算会是什么样子?
是的,在一个浏览器中开发和测试更容易。我相信 IT 专业人员也会很乐意只支持一种机器。但从长远来看,多样性为我们作为开发人员创造了机会。微软拯救苹果,导致了应用的出现,应用挑战了 Web,给了我们 Chrome 和 Google 正在积极推进的无数 API。如果在这个事件链中的任何一个环节,有人说:“唉,如果我们都使用相同的东西,那就容易多了”,那么我们现在就不会拥有这些职业——或者我们现在所处的世界了。
在多个浏览器中开发。在多个浏览器中测试。使用多个浏览器。
你既是消费者,也是生产者。你对未来的发展有发言权。
更新:我更新了这篇文章,稍微扩展了一下 iOS 上的 WebKit、IE6 时代 Firefox 的作用,并明确提到了 Servo,它可能是目前浏览器领域最令人兴奋的事情。
虽然它仍然是一个实验项目,可能不会在实际的浏览器中看到它面世,但 Mozilla 和三星的 Servo 确实是一个全新的渲染引擎,它正在从头开始。
这是一篇很棒的文章。说得很好!
很棒的文章!
我不确定对援助的解释是否准确。引用:“这并不是因为比尔·盖茨和史蒂夫·乔布斯是朋友——不,微软需要苹果成功,这样操作系统才能保持竞争。(任何企业都不想被视为垄断企业!)”——这可能部分属实,但你必须记住,援助的条件包括微软和苹果达成一项跨平台许可协议——这使得微软能够进入 Mac 创造的市场。此外,苹果不得不放弃对微软的一项诉讼,该诉讼声称微软在其部分或全部竞争对手的操作系统中侵犯了版权。这是一个伟大的商业策略。想象一下,如果绿湾包装工帮助明尼苏达维京人渡过难关(两支竞争对手的 NFL 球队,他们的球迷互相仇恨),但作为条件,绿湾可以获得许可来印刷维京人的纪念品和服装并获利。
一篇真正精彩的文章。谢谢,写得很好。
我读过的最好的文章之一,写得非常好,技术基础扎实且有趣。
祝贺 Rachel!
Ricardo
很棒的文章。非常感谢!
可能值得注意的是,WebKit 本身是 KDE 项目中 KHTML 的一个分支,最初用于 Konqueror 浏览器。