原文作者:RACHEL NABORS

译者: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。)

除了 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国际技术”致力于与你共享高质量的技术文章

欢迎关注我们的公众号、将文章分享给你的好友

W3C 特邀专家:浏览器多样性对生态的影响相关推荐

  1. 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...

    主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...

  2. Nature综述全文编译:土壤病毒多样性、生态和气候变化

    原文信息 原文标题:Soil viral diversity, ecology and climate change 发表期刊:Nature Reviews Microbiology 影响因子:78. ...

  3. 【直播回顾】云栖社区特邀专家关键:Java无锁集合代码分析

    主讲人:关键(云栖社区特邀专家) 目前在广州某家知名公司任职架构师,主要负责Spring Cloud.Dubbo.MQ.Zookeeper的规划. 平时比较热衷于研究互联网技术,热爱生活,希望能结交到 ...

  4. Biodiversity and Ecosystem Functioning(生物多样性和生态系统功能)

    文章内容仅用于自己知识学习和分享,如有侵权,还请联系并删除 :) (一)作者简介 G. David Tilman,美国著名生态学家,任教于美国明尼苏达大学,主要研究方向为资源竞争和生态系统多样性.代表 ...

  5. iMeta | 中科院城市所杨军团队揭示城市公园微生物迁移对生物多样性和生态功能的影响...

    点击蓝字 关注我们 城市公园微型真核生物的跨生境迁移有助于维持生物多样性和生态功能 iMeta主页: http://www.imeta.science 综  述 ●  原文链接DOI: https:/ ...

  6. Nature子刊 | 全球变化因子对土壤微生物多样性和功能的影响

    文章亮点: [1] 微生物稀有物种(Rare species)比普通物种(Common species)对全球变化因子更敏感 [2]土壤pH可以解释全球变化因子引起的微生物alpha多样性的变化 [3 ...

  7. Nature综述:古菌的多样性、生态功能和进化史

    论文信息 原文标题:Diversity, ecology and evolution of Archaea 发表期刊:Nature Microbiology 发表时间:2020.05 第一作者:Bak ...

  8. 云栖社区特邀专家徐雷——Java Spring Boot开发实战系列课程【往期直播回顾】...

    徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Java Spring Boot.Spring ...

  9. 【比特熊故事汇】6月MVP英雄故事—微软MVP X 英特尔特邀专家,一起消夏

    夏日炎炎,吹着空调 共度一场直播时光 比特熊与新晋微软MVP和英特尔特邀嘉宾 带来全新技术主题和热门话题讨论 2022年6月17日(周五) [比特熊故事汇]和你直播间相聚 比特熊消夏小礼物 比特熊直播 ...

最新文章

  1. SQL Server 备份与恢复之四:备份类型和选项
  2. oracle数据库表空间文件收缩实例
  3. 编译linux内核时出错
  4. php 如何获取表格数据类型,使用phpword获取doc中的表格数据
  5. 前端学习(1537):为什么使用ng
  6. Ubuntu 下安装JDK
  7. SQL Server 作业监控
  8. updateStateByKey算子入门案例
  9. python生成json文件_json文件生成by python
  10. 单片机C语言程序设计心得,单片机课程设计心得体会
  11. SREng 使用指南(四)智能扫描的详细解说
  12. FRM-10102错误解决
  13. qt界面布局之如何修改qt5版本以上的左上角的图标
  14. 基于51单片机的单电源函数信号发生器设计仿真原理图方案
  15. 【windows】设置远程桌面连接?多用户登录设置?取消登录密码
  16. [原创]京东技术解密读书笔记
  17. android app crash测试,APP常见崩溃原因和测试方法整理
  18. 如何看待互联网组织的“扁平化趋势”?
  19. mysql截取字符串最后两位_MySQL 字符串截取
  20. html++span居右,span在div里居左和居右布局

热门文章

  1. 计算机师范专业考编,不是师范生考教师很难?这4个专业考教师反而轻松!
  2. oracle12c如何存档图片,Oracle Database 12c实用教程
  3. python清除实例化类_在Python中,如何尝试(和排除)类的实例化?
  4. jqueryvar语句_你真的掌握变量和类型了吗
  5. 像个字段相减绝对值_张歆艺做家务受伤,袁弘俩字逗乐媳妇,真是幼稚得像个大龄儿童...
  6. java write to files_Java 8 write to file example
  7. python 正则表达式匹配的位置_python正则表达式匹配 模式匹配
  8. 怎么检测并发处理能力达每秒2万次_系统如何支撑高并发
  9. laravel increment出现了翻倍递增_股票连续多少个涨停板就可以市值翻倍?
  10. Oracle/PLSQL CURSOR FOR Loop