原文做者:RACHEL NABORScss
译者:UC 国际研发 Jothy前端
写在最前:欢迎你来到“UC国际技术”公众号,咱们将为你们提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。算法
不管是早期在代理机构工做,仍是后来在微软的 Edge 工做,我都反复地听到一样的哀叹:“唉,为何 Edge 不能基于 Blink 呢?这样我就能够访问全部想要的 API,也只要在一个浏览器中测试就行了!”浏览器
个人观点很明确:一个只运行在 Chrome Blink 及其后代引擎上的互联网,毫不是咱们想象的天堂。
服务器
做为一名谷歌开发专家,我曾在 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。)
ide
除了 Edge 以外的全部引擎都是开源的,这意味着任何人均可以获取它,将它包装在一个新的界面中,而后发布他们本身的浏览器 - 可能会带来不一样的(也许是更好的)用户体验 - 很多浏览器就是这么干的! Apple 的 iOS 应用商店中只容许发布基于 WebKit 开发的浏览器,所以 iPad 和 iPhone 上的 Chrome,Firefox 甚至 Edge 浏览器表现更像 Safari,而非各自的桌面版本。 Oculus Browser,Brave,Vivaldi,Samsung Internet,亚马逊的 Silk 和 Opera 都在 Blink 上运行。咱们把它们称为“基于 Chromium 的浏览器”- Chromium 是 Google 的开源项目,Chrome 及其引擎也由此派生。(译者注:微软的 Edge 桌面版不久后也将基于 Chromium。)
工具
那么浏览器引擎里面都有些啥呢? 更多的引擎! 每一个浏览器引擎都包含其余几个引擎:
布局和渲染引擎(一般紧密耦合,因此各自区别不大),计算页面的外观,处理绘制、渲染甚至动画。
JavaScript 引擎,每一个浏览器特有的引擎,甚至能够独立于浏览器运行。 好比说,你能够用 Chrome 的 V8 引擎或 Microsoft Edge 的 Chakra 在服务器上运行 Node 程序。
我喜欢将浏览器引擎与生物细胞进行比较。 一个细胞包含许多细胞器以完成不一样的功能,浏览器也是如此。 你能够将细胞核看成渲染引擎,它包含页面应如何显示的蓝图,以及做为 JavaScript 引擎的线粒体,为咱们的平常交互提供动力。(有趣的事实:线粒体曾经是一个独立的细胞,它们甚至有本身的 DNA!)
你知道吗? 浏览器与生物类似的另外一个表现是它们也会演进。
回顾第一批浏览器出现的时候,那个时期比如今简单多了。 当 CSS 在 1996 年首次出如今 Microsoft Internet Explorer 3 中时,它就是当时的新宠! 那时候的 JavaScript API 和 CSS 规范比起如今要少得多。 多年来,浏览器代码库已蓬勃发展,新功能的数量足以支持用户和开发者构建现代 Web 体验。 这是用户需求,浏览器工程建设和规范标准化过程之间的微妙演进。
目前主流的引擎主要有三个:
WebKit 和 Blink(Blink 最初是 WebKit 的一个分支)运行 Safari,Chrome 和 Opera
Gecko 运行 Firefox
EdgeHTML(Trident 的一个分支,又名 MSHTML)运行 Microsoft Edge
不一样引擎之间各有千秋。每个都能从不一样方向拉动 Web 发展: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。 在可预见的将来,不太可能有新血系注入。 就是这个意思。
若是咱们失去了其中一个浏览器引擎,咱们就会失去它的血统,以后是该引擎的每一个载体,以及它所带来的 Web 中独特的内容。
而且它不太可能被替代。
想象一下只有蜂鸟,海豚和马的行星。全部的海豚都灭绝了。在遥远的未来,蜂鸟或马能够演进为能够像海豚同样在海洋中游泳的东西。事实上,恐龙时代的鱼龙看起来很像海豚。可是这种生物与真正的海豚很是不一样:即便是鱼龙也没有演化出回声定位。咱们会等待很长时间(多是永远)来得到血统,以发展咱们今天在其余血系中已经存在的特征。那么,为何要袖手旁观甚至鼓励消灭这些有价值的独特血统呢?
咱们已经失去一个了。
咱们曾经有过四个主要的渲染引擎,可是在采用 Blink 以前,Opera 中止了自家渲染引擎 Presto 的开发。
译者注:微软刚刚的这一宣布,将会怎么有什么样的影响呢?
有些人认为,若是像 Microsoft Edge 这样的浏览器选择在 Blink 上运行,那么微软的工程师能够帮助构建更好的 Blink,为全部其余 Chromium 浏览器提供新功能。这听起来很明智,对吗?
但请记住,Blink 是从 WebKit 分叉的。如今同时存在 WebKit 贡献者和 Blink 贡献者,而且他们的贡献不是一对一的。就像三星和 Occulus 同样,微软这样的公司要想用不一样于谷歌的引擎来开发也不是不可能。若是这些差别没对齐,公司将致力于对其代码库,而不是在上游作出贡献。咱们最终将会获得一个 WebKit 和一个 Blink--两者不会有深入差别,不似伴随互联网数十年发展的代码库那般。
从理论上讲这是个好主意。但在实践中,咱们最终采用相似的方式 - 而且浏览器引擎生态中的“遗传多样性”愈来愈少。
我崇尚竞争。与其余漫画家竞争,以制做更好的漫画,并吸引更多的观众,让我成为今天的我。 (真实的故事:我以漫画家的身份成立我的站点,创建本身的社区网站,时事通信和购物车。)我想提醒人们,竞争不是要消灭你的竞争对手。若是你这样作了,你就会停滞不前并失去你的用户:请参照 Internet Explorer 6。
Internet Explorer 6 出现时是一个了不得的浏览器:足够高的性能以真正实现以前版本的 Internet Explorer 引入的功能,如 DOM,数据绑定和异步 JavaScript。它的竞争对手 Netscape Navigator 没法与之相抗衡最终成为炮灰(只有它的引擎 Gecko 得以被 Mozilla 基金会重写 - 它就是那么小! - 从新成为后来的 Firefox)。
微软认为它已经赢得了互联网,遂将注意力转向其余方面,听任 Internet Explorer 停滞不前。正是这给了 Firefox 可乘之机,它经过阻止弹出窗口和更好的 UI 等功能为用户了提供更好的体验。 (界面层确实很重要!)Firefox 还与 Opera 合做开发了先进的 Web 标准,这在 IE 和 Netscape 时代并没被瞧上眼。但互联网用户偏心这一套,Firefox 便经过口口相传和草根宣传活动如燎原之火般发展。
当 iPhone 出现时,Apple 专一于其盈利的应用市场,并努力削减对Flash的支持 - 这是 Web 上最像应用的交互平台。应用为内容建立者提供了一种不一样于广告模式的工做变现方法。广告是谷歌的衣食父母,大 G 愈来愈担忧,由于这对他家那些只把互联网做为数据传输管道的应用形成了威胁。与此同时,微软一直专一于构建本身的移动操做系统。这时谷歌作了两件事:Android 和 Chrome。
Chrome 承诺提供更好,更快的浏览体验。它功能极简,但谷歌甚至尽心尽力(至少在个人圈子里)找了著名的漫画家 Scott McCloud 制做漫画,阐述浏览器对用户的使命。随着 Chrome 在每一个操做系统和 Android 手机上的无处不在,它的开发工具模仿了 Firefox 煊赫一时的 Firebug,而且愈来愈多地参与规范,Chrome 不只给了 Internet Explorer 沉重的打击,并且还有可能扼杀这个星球上其余的浏览器引擎!
将浏览器的你们族树(或灌木丛)修剪成一个脆弱的单一文化的分支。受市场和人口变化的影响,单一文化很容易受到环境和生态挑战的影响。下一个对 Web 的威胁出现时会发生什么,但咱们没有 Firefox 的多线程?仍是 Microsoft Edge 的系统集成?若是没有它们,咱们可以快速迭代吗?或者,咱们是否会期待 Chrome 开发人员作点什么,并祈祷他们不要像微软那样变得停滞不前,而是在“赢得网络”以后着手处理其余问题。
讽刺的是,谷歌为保持 Web 不丢失应用模型而构建的浏览器,自己就像 Internet Explorer 6 同样垄断了 Web 开发。
前面说过我会回到“把用户群大小做为功能”的话题。让绝大多数 Web 开发社区为你的平台构建和测试是一项核心竞争力。首先,你能够保证大多数网站都能在你的浏览器中完美运行 - 你没必要为了找出财富 500 强网站一个奇怪的 bug 而花费太多时间和精力,换用竞争对手的浏览器并再也不回头。因为用户数量减小致使开发人员测试次数减小,反过来又致使用户数量减小,这种状况不断恶化。
它还能让你更容易知足你母公司目标的新规范(可能能够也可能不能够知足 Web 社区的目标),并让大型开发社区首先构建到你的实现,而无需等待其余浏览器遇上。若是一个较小的浏览器提出了一个没有人注意到的规范,而你在须要时提取它,那么人们就会记住它是你的努力,不管是否有意,继续创建你的思想共享。
这对竞争产生了下行压力,竞争对手根本没有或不能使用最大的浏览器团队拥有的相同资源。不管是否是有意为之,这都是一种残酷而有效的方法。
这是道德问题吗?从我的贡献者层面看,是的。这是一个恶性循环,企业经过迫使竞争对手使用有限的资源来竞争从而加速了其灭绝?另外一个层面看,也是的。让大批人只为你的平台构建的确推波助澜。
从 Chrome 团队到网络开发者,全部使人敬畏,善意真诚的好心人均可以举起手来,合法地说,“我只是在努力推动 Web 建设!”同时也为垄断作贡献。
Chrome 拥有最多的资源,而且在构建 Web 方面属于领头羊,以致于没法肯定咱们正在构建的 Web 到底是咱们想要的...仍是 Google 想要的。
有一段时间,微软拯救了即将倒下的苹果。并非由于比尔盖茨和史蒂夫乔布斯是朋友 - 不,微软要让苹果公司取得成功,以维持操做系统竞争的局势。 (没有企业但愿被视为垄断!)
可是,暂时假定苹果已死。若是只剩下 Linux 和 Windows,那么我的电脑今天会是什么样的?若是 Apple 没有努力研发 iPhone,移动设备会是什么样子?
是的,只在一个浏览器中开发和测试更省心。我相信 IT 专业人员会喜欢只有一种机器。但从长远来看,不一样品种为咱们做为开发者创造了机会。微软拯救了苹果公司,从而带来了一些先进的应用,这些应用挑战了 Chrome 及 Google 负责推动的无数 API。若是在这一系列事件的任何一点,有人曾说过,“嗯,若是咱们都使用相同的东西那就容易得多,”咱们就不会拥有如今的职业生涯或世界了。
在多个浏览器中开发。在多个浏览器中测试。使用多个浏览器。
你既是消费者又是生产者。你对将来的发展方式有发言权。
更新:我更新了这篇文章,稍微扩展了 iOS 上的 WebKit,Firefox 在 IE6 时代的做用,并明确地强调了对 Servo 的关注,这多是目前浏览器中最使人兴奋的事情。
英文原文:
https://css-tricks.com/the-ecological-impact-of-browser-diversity/
感谢你能坚持读到这里,你能够思考一下做者在这篇文章中提到的一些观点,同时舒适提醒:第 13 届 D2 前端技术论坛将于 2019 年 1 月 6 日在杭州举办,若是你想和同行有一个深度交流,若是你想了解目前行业在前端方面发生了什么,那就赶忙访问大会网站参与吧:http://d2forum.alibaba-inc.com
好文推荐:
微软官方:为开发者减小开发成本,Edge将采用 Chromium 开发
“UC国际技术”致力于与你共享高质量的技术文章
欢迎关注咱们的公众号、将文章分享给你的好友