Facebook:“把宝压在 HTML5 上是一个错误”—技术原因及其反响

  • Abel Avram
  • 巨泽建

2012 年 10 月 22 日

话题:移动FacebookHTML5语言 & 开发架构

Facebook 决定不再使用这两三年所规划的 HTML5,回到原生应用的道路上。本文讲述了 FB 转变背后的技术细节,以及 Xamarin 和 Mozilla 对这一转变的反应。

Facebook 的 CEO 马克·扎克伯格最近在 TechCrunch 的一次采访中宣称:“作为一个公司,我们最大的错误是在 HTML5 上下注太多了,我们没有选原生应用,因为 HTML5 没有达到我们的预期”,而且,“自从发布了 iOS 应用后,我们发现人们订阅 feed 的数量增加了一倍。”

扎克伯格没有谈及他们在使用 HTML5 时遇到的问题,但他认为这些产品的质量不够好:“外界已经有非常好的移动体验了……我们追求最高品质,唯一的办法就是使用原生应用。”

Tobie Langel 是 Facebook 软件工程师和 W3C 咨询委员会代表,他在一篇帖子中详细描述了 Facebook 基于 HTML5 做移动网页时遇到的性能问题。Langel 提到的第一个问题是缺少调试工具:

移动浏览器缺少工具,从而很难深入进去,发现真正的问题是什么……

我们遇到的最大的问题是内存相关的。对于给定内容大小,我们的应用很容易耗尽设备硬件能力,引起系统崩溃。不幸的是,我们很难理解到底是什么引起了这些问题。GPU 缓存耗尽?达到资源限制?或是其他原因?很难说。

Langel 希望知道堆栈、对象、GPU 缓存的内存使用情况,以及 GC(垃圾回收)周期、FPS 和其他资源限制信息。

Langel 谈到的 HTML5 的另一问题是其页面滚动性能,大部分页面滚动通过 JavaScript 实现,因为“其他选择不够快”。他提道:

不连贯的帧率,UI 线程滞后(断断续续)。

由于内容大小和图片数量导致的 GPU 缓存耗尽。

在不同操作系统中,原生的滚动有着不同的体验。针对一种操作系统优化过的 JS 实现,在其他系统上的体验却很差(机器人学中的“神秘波谷”)。

安卓设备上触摸事件相关的性能问题(延时,事件不足)使 JS 实现的页面滚动更加脆弱。

Langel 提到的其他问题有:以“黑盒”出现的 GPU、安卓系统中更好的触摸跟踪支持的需求、平滑动画以及更好的缓存。其中一些问题已经提交给 W3C Web 性能工作组

Nat Friedman是 Xamarin的 CEO,Xamarin 是构建跨平台本机应用的工具提供商。在一次 InfoQ 评论中,他表示欢迎 Facebook 的改变:“对包括设备提供商,应用发布商以及最重要的消费者在内的整个移动生态系统而言,这一支持原生体验的转变是非常重要的事件”。他还指出,移动标准现在还为时尚早:

移动创新仍在飞速发展,远超“标准”方式能达到的速度。历史上,当新的操作系统出现时,它的能力非常新,使用它们的唯一方式就是在操作系统层次使用。这一阶段,最好的应用和最具突破性的创新都在靠近操作系统层面出现。对于当前移动设备平台,这种状态非常准确。市场份额的竞赛驱动了设备操作系统层面上巨大的变革和创新。在接下来的几年里,这些操作系统将会稳定下来,这一层次的创新将会变缓,使得标准化方式更加可行。但这种转变需要几年时间。

Mozilla(Mozilla 是致力于 Web 技术的组织)的 CTO Brendan Eich 在 ZDNet 对 Brendan Eich 的采访中,他对 Facebook 在 HTML5 上的失败表达了不同的看法

如果你品一品言外之意,他(马克·扎克伯格)说的应该是将原生应用和 HTML 糅合起来。当这样糅合时,两个系统间总会有差距。Joe Hewitt 是我的一个朋友,他曾在 Facebook 工作,做了第一个糅合应用,将两者很好地集成起来。但他离开了 Facebook,后续版本中,将两者无缝集成的技能(可能还有苹果公司的一些支持)不见了。

Eich 坚信 Web 将最终胜出:

我从不相信 Web 会失败。这只是个语用学的问题,而你却被这些给绕进去了。

像 Facebook 这样的公司搞得起开发原生应用,尤其是 iOS 上的原生应用。但根据长尾理论,开发者将主要集中于开发 Web 应用,并且以此为乐。

如果 Web 发展到提供缺失的 API,并具有更好的性能,开发者就没必要开发其他应用了。

我有一种感觉,Web 将变得非常好(十年之后),那时将不会有现今这样地在原生应用对 Web 应用之间无休止的论战了。

Matt Asay 是 The Register 的编辑,他在“本机应用 vs.HTML5 应用的争论”中,引用了一位匿名 Facebook 工程经理的话说:

现在,Fackbook 通过写原生代码是行动最快的。这并不是说 HTML5 将一直无法达到宣称的效果,而是在当前情况下,摩尔定律和 Web 引擎仍然有效。因此我们做了一个务实的决定。最终,如果 HTML5 使得我们发展更快,你将看到我们会回归到 HTML5。我们将使用任何让我们高效高质量工作的技术栈。

马克·扎克伯格也看好 HTML5 的长远前景:

并不是说 HTML5 不好。长期来看,事实上 HTML5 真的让我非常兴奋。有趣的是,实际上每天使用移动 Web Facebook 的人比使用 iOS 应用或 Android 应用加起来的更多。因此移动 Web 对我们来说非常重要。

Facebook 八月份发布了 iOS 本机应用,他们正在开发 Android 上的类似应用,应该很快会在 Google Play 应用商店上架。


查看英文原文:Facebook: “Betting on HTML5 Was a Mistake” – Technical Reasons and Reactions

移动FacebookHTML5语言 & 开发架构