写点什么

都用 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:169074
用户头像

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

关注

评论

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

一个 fault injection 测试的三次演化

QE_LAB

硬件 测试环境

相约2023,高通公司宣布参加第六届进博会

科技热闻

深入理解Metrics(四):Meters

冰心的小屋

Java metrics meters

中软国际发力智联网自主创新 数智赋能千行百业

中软国际AIoT开发者社区

华为开发者大会2022 智联网

直播预告|AutoML Meetup V1 第四范式 & 百度 & AWS ,共探自动机器学习最佳实践

星策开源社区

人工智能 机器学习 百度 AWS 自动机器学习

英特尔CEO出席2022世界互联网大会:五大超级技术力量释放数字时代全新可能

科技之家

Nacos 多语言体系再添新员:首个 Rust 语言版本正式发布!

阿里巴巴云原生

阿里云 云原生 nacos

前端leetcde算法面试套路之二叉树

js2030code

JavaScript LeetCode

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

如何开发一个标准的云原生应用?

阿里巴巴云原生

阿里云 微服务 云原生

14位资深大咖,11 场技术演讲!龙蜥云原生专场精彩回顾来了

OpenAnolis小助手

开源 技术分享 龙蜥社区 2022云栖大会 云原生专场

【C语言】double 关键字

謓泽

11月月更

Linux下安装Python3.6.8(超级详细)

A-刘晨阳

Linux 运维 Python3 11月月更 pip3

【解决方案】国产逆袭?基于国产 MCU 的网红筋膜枪方案分析

元器件秋姐

国产芯片 BLDC方案 BLDC应用 电机控制 元器件电商

断连?消息丟失?不用愁!教你快速在物联网平台上排查问题——设备管理运维类

阿里云AIoT

阿里云 物联网平台 设备上云

完美避开,99%的PCB工程师都踩过的坑!

华秋PCB

工具 PCB PCB设计

【LeetCode】最长同值路径Java题解

Albert

算法 LeetCode 11月月更

生于云,长于云,华为云推动开发者数字化创新

科技热闻

啃透这份“高并发编程核心笔记”,跳槽阿里直接涨10K

小小怪下士

Java 编程 程序员 高并发 阿里

用户+案例+认证+框架一键搞定,不愧是阿里最新Spring Security全栈笔记!

Java永远的神

Java 程序员 springsecurity java面试 安全框架

Wallys//Qualcomm ipq4018/IPQ4028 Access Point /high power/Wireless Dual band 11AC Wave2 /Indoor industrial wifi5 router

wallysmeng

IPQ4018 IPQ4028

python的基本操作

乔乔

11月月更

浅谈Kotlin编程01.初识Kotlin和入门示例

南巷羽

android kotin 11月月更

深入理解Metrics(三):Histograms

冰心的小屋

Java metrics Histograms

网站收录量与索引量有什么区别?

源字节1号

软件开发 小程序开发

Linux—nmap、nc命令 –网络探测工具和安全和端口扫描器

A-刘晨阳

Linux 运维 网络 11月月更

一站式工业边缘数据采集处理与设备反控实践

EMQ映云科技

物联网 IoT neuron 11月月更 eKuiper

BI智慧工程行业应用方案丨文末获取三重资源包

葡萄城技术团队

slurm集群调度策略详解(1)-主调度

慕冰

Slurm 调度系统 主调度

Linux—watch命令详解– 周期性执行命令

A-刘晨阳

Linux 运维 11月月更 周期性监控

华为首发微存储新品,破解互联网海量数据高效存储难题

科技热闻

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