写点什么

都用 WebKit 也并不意味 Web 的统一:WebKit 的前世今生

  • 2013-02-16
  • 本文字数:3275 字

    阅读完需:约 11 分钟

由 Opera 引发的 WebKit 话题正在网络上引起巨大的争论。知名网评人 Robert Nyman 也在他的博客发表了自己的见解。和别人不同的是,用他自己的话说,他希望用尽可能实事求是的态度,来客观的分析,对于开发者来说,如果当市面上的大多数浏览器都采用WebKit 核心,那会有哪些可能的后果。

WebKit 究竟是什么?

最近 WebKit 这个词铺天盖地,它究竟是什么意思呢?

官方解释:WebKit 是一个开源的 Web 浏览器引擎。WebKit 同时也被 MacOS X 系统的 Safari、Dashboard、Mail 和很多其他 OS X 程序选用为引擎。WebKit 的 HTML 解析器和 JavaScript 解析器代码分别源自 KDE 的 KHTML 和 KJS 代码库。

这就是在说,WebKit 是 Safari 背后的浏览器引擎。还需要补充的是,Apple 在 Safari 里面使用了自己的 Nitro JavaScript 引擎(只用 WebKit 来渲染 HTML)。

有意思的是 WebKit 现在已经不仅仅是苹果在使用,它现在还是 Google Chrome 的内核:

Google 官方说明:Chromium 使用 WebKit 做为渲染引擎。与其打造 Chromium 特有的实现方式,我们更希望去尽可能多的去为使用 WebKit 核心的浏览器做贡献。

这是说 Chrome 也在使用 Nitro JS 引擎?不,Chrome 有他自己的 V8 JavaScript 引擎。简单的说,Chrome 也使用 WebKit,但是它也实现了自己的 JavaScript 处理方式。V8 同时还是驱动 Node.js 的 JavaScript 引擎。

Opera 会使用 Chromium 实现的 WebKit,也会使用 V8 引擎。这就是说虽然 Opera 在宣称自己使用 WebKit,但事实上它使用 WebKit 和 Safari 与其他浏览器使用的 WebKit 并不完全一样。如果你想客观了解现状,这是必须清楚的概念。

现在 WebKit 究竟有多少分支?

所以我们知道现在 WebKit 正在驱动,或者将会驱动 3 个主流浏览器。但是 WebKit 还有多少其他类型的实现?

确实还有很多很多 WebKit 的变种,特别是在移动领域。他们都是 WebKit 的分支。

这些 WebKit 的分支有多少差别?

有一种假设:因为这些浏览器都在使用 WebKit,所以他们也会以同样的方式去支持相同的特性。对于很多基本的特性来说,确实是这样。但是对于很多小众特性,就未必如此了。

举例来说,当 Chrome 开始支持游戏手柄 API 的时候,Safari 不但还没开始支持,而且以后也不太可能支持。另一个例子是 WebGL。做为在 Chrome 已经支持了很久的特性之一,Safari 却才刚刚看到了曙光(而且还是在开发者选项里)。当然,这些还都是比较出名的例子。还有很多试验性的例子潜伏在大众的视野之下。

甚至很多基础的、日常的功能,在不同的代码分支下都有所不同。PPK 完整的总结了这些 WebKit 的差异

新特性如何加入到 WebKit 中,谁又来负责审核?

现在有许多公司正在为 WebKit 项目贡献自己的力量

WebKit 项目提交和审查页面提到只能有老的代码提交员和审核员才能提名新的新的代码提交员与审核员。这比较合理。然而,无论 WebKit 项目决定让谁参与进来,最终都还是要让 Apple 来做审核:

当有人被 WebKit 代码提交员成功提名后,Apple 会处理发送代码提交员协议,在签署协议之后,Apple 会继续开通 SVN 账户。

对于这一点并没有什么隐秘的动机,但这确实在告诉大家,WebKit 和很多开源项目一样,并不是真正分散和民主的。权利是且必须是集中的——只有这样才能保证能做出决定,并且把事情做成。

如果一个浏览器迁移到了 WebKit,那是不是意味着(在编写代码的时候)可以少测试一个浏览器了?

不。每个浏览器都有它自己的怪异模式、性能差异、设计,和功能。所以每个浏览器都要测试。

当一个功能加入到 WebKit 的时候,是不是意味着在其他浏览器里就可以使用这功能了?

当然不是。比如游戏手柄 API 的例子。Paul Irish 强调了这样一个事实:WebKit 浏览器们可以挑选究竟把哪些 API 放入他们的版本。比如 Chrome 选择支持游戏手柄 API。很多 API 在 WebKit 的层面就已经被实现了,但是 WebKit 项目书允许关闭这些功能。(编者注:Paul Irish 是 Google Chrome 的员工,他曾在 jQuery 团队工作两年。)

Opera 迁移到 WebKit 究竟意味着什么?

它意味着 Opera 将会为 WebKit 项目投入开发精力,但是更可能的是,意味着这 Opera 将会在有经历为自己的浏览器打造一些其他的功能

迁移到 WebKit 意味着我们可以把更多开发资源投入到新功能和增进用户体验的解决方案上去。

这也意味着他们不会再继续开发他们的自有 Web 渲染引擎 Presto。

同源和多样化

上面的问题和回答告诉我们,WebKit 们很明显有着相同的源头。在不同的浏览器版本里他们又有着不同的实现,但是归根结底,他们共享着相同的代码库。

这意味着你可以为移动互联网、为性能、为任何你能想到的目标来优化 WebKit。这是件好事儿。而且这必然会带来各种各样的 WebKit 实现,并为解决问题引入更多资源。在最理想的情况下,这些进步会回馈给每个人。

这会带来非常多好处。这也是我们为什么相信,有完全不同的一群人,来打造一个浏览器渲染引擎是非常重要的。

Apple 在 KHTML 上构建 WebKit 是一件好事情。他们当初也可以选择在 Gecko 上做这件事情(编者注:Gecko 是 Firefox 的引擎),但他们选择了创新,给市场增加了多样性,还带领浏览器在过去几年里取得了巨大的进步 —— 这就是竞争带来的直接结果。

如果他们只是做了另一个版本的 Gecko,那我们也不确定我们今天会是个什么情况。

渲染其实并不相同

把 WebKit 先撇一边儿,如果所有的浏览器都使用相同的引擎,这对程序员来说意味着什么?这种情况真的会发生吗?Web 会因此更加美好吗?对开发者来说工作会不会更轻松一些?

最大风险在于程序员们如果相信这些浏览器如果都在使用完全相同的渲染引擎,那么:

  • 开发者不会再测试那么多浏览器了,因为他们认为反正浏览器都是 WebKit 核心的
  • 开发者也不再测试其他的浏览器引擎了,反正 WebKit 占据了主流
  • 开发者将会更多使用 WebKit 引擎独有的代码,而不是专注使用 Web 标准

最可能的后果是程序员会选择——或者被导向——相信内核的统一会让工作变轻松。但是随着时间的流逝,他们会意识到尽管同是 WebKit,也会有很多不同的东西。(编者注:见 PPK 总结的 WebKit 之不同)。

这给 IE 和 Firefox 留下了什么局面?

让我们来清醒一下,看看这对 Microsoft 和 Mozilla 来说意味着什么。现在有很多声音,认为他们应该用 WebKit 来实现 IE 和 Firefox。

但这真的那么容易吗?如果这样的话,所有主流浏览器都会构建于一个相同的代码库。但是还会有很多的可变因素,代码分支,插件,等等。对我们来说,这似乎并不是达到多样性的最佳方式。

如果 IE 和 Firfox 不切换渲染引擎呢?这很可能会是一场精彩的竞赛,并会为我们带来一个光明的未来。但与此同时,这也给 MicroSoft 和 Mozilla 出了难题:他们将在实现各个层级的 Web 标准,提升性能,和很多其他方面耗费很多精力,并遇见重重挑战。

如果市场份额逐渐萎缩,让 WebKit 完全统治?也许人们将会使用 IE 和 Firefox,而不使用 WebKit?

在未来的岁月里,Firefox 和 IE 有没有被逐渐淘汰的风险?或者他们会成为不同的因素留在市场上?

浏览器厂商的动机是什么

除了现在已经有很多不同 WebKit 版本的事实以外,还有很多 Web 浏览器在参与竞争,试图与众不同。其中一些相信竞争很大程度将会体现用户体验领域。这点没错,但是在此领域以外,也有很多竞争点。

《WebKit 的悲剧》一文中提到的那样,谁会对花钱花资源来为竞争对手修补 bug 呢?

看上去大家更有可能会把精力花在新特性,新功能上,因为这会才让他们在竞争中脱颖而出。

在这一点上,你将如何发现新的元素呢?新功能在某些程度上还会被发现。但是 CSS 呢?一个 -webkit 前缀的 CSS 属性意味着什么?其实什么意义都没有,除了它会支持 IE 和 Firefox 以外的任何其他浏览器。下一步又会发生什么?更多的浏览器厂商的 CSS 前缀吗?

WebKit 是好的

允许我们强调一下,WebKit 是好的。它有开放的流程和强大的贡献者。我们只是想澄清一个当下被广泛接受的错误概念——一个 WebKit 等于所有 WebKit,还有——如果所有浏览器都选择 WebKit,那么对开发者来说,工作会变得更轻松。

我的意思是说,与众多独立的浏览器引擎会为市场带来多样性一样,WebKit 在这一点来说,同样会表现的很棒。

2013-02-16 01:169186
用户头像

发布了 91 篇内容, 共 38.5 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

JVM真香系列:.java文件到.class文件

田维常

JVM

诈骗?通证项目方的危局

CECBC

区块链 法律

http请求中get和post方法的区别

测试人生路

HTTP post GET

阿里P8对Thread核心源码讲解

Java架构师迁哥

ViewportFrame demo

katichar

【Knative系列】一文读懂 Knative Serving扩缩容的原理

公众号:云原生Serverless

Serverless knative autoscaler kantive

互联网审判中区块链存证技术的应用进路

CECBC

互联网 电子存证

“十三五”收官,区块链赋能能源电力路在何方?

CECBC

区块链 电力 能源

隐私计算S2赛季 谁是真正的王者?

hellompc

学习 隐私计算

Week 5学习总结

balsamspear

极客大学架构师训练营

搭载设计师级独显英特尔Xe MAX,非凡S3x体验全能创作

E科讯

性能测试,简单的压测工具

garlic

极客大学架构师训练营

训练营第三周作业

大脸猫

极客大学架构师训练营

Redis最常见的16道面试题与详解

Java架构师迁哥

字节跳动HR:3年从4000人招到10万人,我经历了什么

Java架构师迁哥

架構師訓練營第 1 期 - 第 07 周作業

Panda

架構師訓練營第 1 期

响应式编程简介之:Reactor

程序那些事

响应式编程 reactor Reactive 程序那些事 响应式系统

全球首批搭载英特尔Xe MAX独显惊艳上市,非凡S3x尽显创作魅力

E科讯

字节跳动大神亲自总结SpringBoot手册,让你可以在简历上写精通SpringBoot!

Java架构追梦

Java 架构 面试 微服务 springboot

手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc

yi念之间

RPC ASP.NET Core

英特尔进军独显领域,第一批搭载锐炬®Xe MAX独显轻薄本已问世!

E科讯

蚂蚁金融推迟上市:互联网金融是否要遭遇滑铁卢

石头IT视角

我去!三面字节竟全败在Redis上,带薪摸鱼刷1949页进阶笔记

996小迁

Java redis 架构 面试 程序人生

训练营第三周总结

大脸猫

极客大学架构师训练营

Week 5命题作业

balsamspear

极客大学架构师训练营

英特尔首批独显笔记本亮相,非凡S3x纵享轻薄新体验

E科讯

线上Java程序占用 CPU 过高,请说一下排查方法?

古时的风筝

Java JVM cpu 100%

25个小众的Java库

GuoYaxiang

Java 开发工具

手动造轮子——为Ocelot集成Nacos注册中心

yi念之间

nacos ASP.NET Core Ocelot

Flink 1.11 与 Hive 批流一体数仓实践

Apache Flink

flink 流计算 实时计算

NPC Follow

katichar

都用WebKit也并不意味Web的统一:WebKit的前世今生_JavaScript_彭超_InfoQ精选文章