jQuery 作者 John Resig:WebKit 就是浏览器引擎中的 jQuery

  • 彭超

2013 年 2 月 14 日

话题:JavaScriptDevOps语言 & 开发架构文化 & 方法

JavaScript 领域的神级人物,jQuery、《Pro JavaScript》与《JavaScript Secrets》的作者, Khan Academy 计算机科学学院的院长 John Resig,在看到 Opera 浏览器切换到 WebKit 引擎的新闻,以及 Twitter 上许多咬牙切齿的争论后,忍不住在自己的博客发表了一番见解,英文原文在此。他觉得大家对这件事的反应让他感觉回到了 2008-2009 年,而现在已经是 2013,Chrome/Chromium 团队已经通过自己的成绩向大家证明了当使用 WebKit 的时候,可以不用担心发生停滞的步伐或者创新的缺失,反而还能在实现通用 Web 标准的时候少花很多时间。他还认为,WebKit 在这一点上发挥的作用,就像 jQuery 对 JavaScript 一样。

在 Opera 切换浏览器引擎这件事上,John 总结了他见到的几种典型言论,并一一加以点评:

浏览器切换到 WebKit 会导致浏览器引擎发展停滞

很明显这不是真的。KDE 创立了 KHTML,在 KHTML 的基础上 Apple 创立了 WebKit,而 Google 在它的基础上创立了 WebKit/Chromium。我相信任何人都能指出,相比 Safari 来说,Chome/Chromium 比 Safari 更好,而 Safari 比 Konqueror 更好。Chrome 团队已经证明了在选择使用 WebKit 时,作为 WebKit 的项目贡献者,他完全有能力将 WebKit 驶向你想要去的方向(一般来说是去更好的方向)。我完全相信拥有高素质开发团队的 Opera 也会做类似的事情。他们完全可以在 WebKit 上实现相当数量的 Opera 独有特性,这些特性之后又非常可能会流向其他也使用 WebKit 作为引擎的浏览器。

这会帮助 WebKit 成为一个事实上的标准

我没看到比这更中肯的观点了——WebKit 已经是事实上的标准。比如,每个人都清楚浏览器早就实现了带有诸如‘-webkit’这样的特性。很显然,WebKit 成为事实标准这件事儿早已经深入人心。当然,Bugs 也是。WebKit 是一个由许多浏览器厂商贡献代码的公共代码库,然而,每个浏览器厂商都可以改变他们自己的代码分支。我认为已经拥有事实标准的 WebKit 的 bug 们肯定会被浏览器厂商修复,但引擎中有 bug 并不代表浏览器厂家没有修复能力——他们可能故意不去修复这些 bug(就像浏览器厂家们目前正故意克隆那些 -webkit 前缀一样)。

就像 JavaScript 库一样,事实上大家都已经把 jQuery 当作了标准。但是这并没有导致发展的停滞。这还导致出现了很多构建在 jQuery 之上的,高层流行框架的产生,比如Twitter BootstrapHTML5 Boilerpalte,和Backbone.js

这会妨碍 Opera 影响 Web 标准的能力

我不认为 Opera 切换到 WebKit 会导致这个情况发生。但我确实看到Anne van Kesteren从 Opera 跳槽到 Mozilla 确实是 Opera 推进 Web 标准能力的巨大打击。但我对内幕一无所知,但是如果他的跳槽是源自这次浏览器引擎的切换,那么 Opera 影响 Web 标准的能力确实遭受到了损失。

Opera 切换到 WebKit 是在走下坡路 /Opera 份额太小,如果 Firefox 或者 IE 切换到 WebKit 那会是一个大问题

我认为有一点已经非常清楚了:目前 WebKit 在移动端已经非常明确的大获全胜。包括即将切换到 WebKit 上的 Opera Mini/Mobile,WebKit 几乎是市面上绝大多数移动浏览器所选用的唯一渲染引擎。如果任何其他浏览器想要在移动世界占据一席之地,那它必须和 WebKit 在功能上保持一致。让我们在此得到一个逻辑上的结论:在移动世界已经被 WebKit 统治的情况下,为了保持同步,Mozilla 和 Microsoft 将会感受到巨大的压力来迫使他们将自己的浏览器也切换为 WebKit。Google 已经通过 Chrome 证实了使用 WebKit 并不会导致发展停滞,其他公司更没有理由不来继续打造 WebKit(有可能会创造 WebKit 的混合体,比如 WebKit+IonMonkey)。

这些问题都归结到这个大问题:他们(Mozzila,Microsoft)应该切换引擎吗?

老实说,在这一点上,对 Mozilla 和 Microsoft 来讲,这成了一个商业问题,或者是工程问题。如果你的一些开发者要花他们所有精力去实现别人正在实现的相同标准,那么切换到一个公共的代码库(指 WebKit,编者注)将会解放你的劳动力,让你可以做点儿别的事情。你可以看到 Chrome 的例子:他们解放出的生产力全面投入到了性能的竞赛上。这个打造最快浏览器的比赛促进了大家共赢的结局。

最后,我们一定要了解,WebKit 并不是一个完整的实体。他是一个有多家公司贡献代码的共享代码库。(从这方面来说,这和 jQuery 并不相同:几乎所有的 jQuery 代码贡献最终都回到它的主代码库,而 WebKit 的有些更新则只保留在分支之中)。使用一个共同的代码库并不意味着这是浏览器开发的一切,更不是浏览器开发的终结。在一个共享的代码库中仍然可以有持续不断的创新,它的性能也当然会一直提升下去。

在原文评论中我们看到,即便是这种重量级人物的发言,也会引来大量吐槽。大家赞同 John 对 WebKit 的认可,但是不少人对于 jQuery 的部分却不那么满意。用我们熟悉的词来形容,就是“楼盖偏了”:

mitch:我很了解 John 和 jQuery,所以我不得不承认这是一个负面评论:我认为 jQuery 只是 JS 框架中的 IE7 而已。所有我见到在使用 jQuery 的人都把代码搞的一团糟,毫无结构可言。毫无疑问,jQuery 非常强大,但是它被自己局限住了。我可不认为 WebKit 是浏览器中的 jQuery。

michael camden :@mitch 我可不太赞同你的观点。jQuery 把代码结构的问题完全留给了程序员。jQuery 非常灵活,它只是并不像那些庞大的框架一样去强制要求你按照固定格式书写代码而已。

Mark V :完全同意 Mitch 对 jQuery 的观点。

jQuery 只是在 JS 的顶层做了一些事情,而为了这一点,它向很多短视的利益屈服了。而这是很多大的 JS 项目根本不看中的。如果所有的浏览器都向 WebKit 迁移,这可能还不错(比如没有 IE7-9 的烦恼了,真棒),但是长期来讲这伤害到了整个 Web 开发产业。

还记得 IE6 吗?当它刚发布的时候吗?当时它还是一个相当不错的浏览器。最起码比 IE5 强多了。所以当时所有人都在 IE6 下写代码,和 bugs 为伍,适配网页布局和引擎的怪异模式。一片祥和,不是吗?而 10 年后,它却成了 Web 开发行业里最沉重的负担。

当人们开始在单一环境下编写代码,并开始利用它的 bug 来实现各种特性的时候,标准就不再重要了。各种实现成了新的标准。

特别说明:Backbone 是可以脱离 jQuery 运行的。(编者注:这位仁兄最后还不忘吐槽。)

Rob :一个更恰当的比喻应该是 Linux 内核。Chrome 就像 Ubuntu,Safari 是 Fedora,Opera,我估计应该算 Mint 或者 Arch。

更多有趣的留言,大家可以点击此处查看英文原文

对于此事现在业界众说纷纭,JavaScript 的另一位大神 Douglas Crockford 怎么看?敬请继续关注 InfoQ 的后续报道。也欢迎各位留言讨论。

友情提示:InfoQ 中文站现在已支持 Google 和 MicroSoft 账户登陆。

JavaScriptDevOps语言 & 开发架构文化 & 方法