为什么使用者不喜欢Facebook 的iOS app?
2012-05-21 15:11

Facebook 创办人兼CEO Mark Zuckerberg 最近喜事连连,除了上周五自己创办的公司公开上市,他自己也在隔天与女友结婚。不过也许是因为要公开上市,最近市场冒出许多质疑Facebook 的声音,例如美国通用汽车(GM)认为在Facebook 投放广告不划算、分析师认为Faecbo??ok CEO“不够成熟”(例如在路演期间穿的是运动装兜帽外套而非西装)、Facebook 的市值被高估等等,其中跟使用者最为相关的,就是Facebook 搞不定移动装置。

目前Facebook 有半数的使用者透过移动装置(iOS、Android app 或移动版网页等等)使用这个全世界最大的社交平台,可是他们的app 在移动装置上的两大平台iOS 与Android 最近饱受批评,而这些批评不外乎是速度太慢、bug 太多,举例来说,也许有读者看过Facebook 的iOS app 出现类似以下的画面:

Facebook App 评价下滑

最新一版的Facebook iOS app 在App Store 上评价只有两颗星(但是过去的总体评价是四颗星),而给予评价的23303 名使用者当中有12809 人打了一颗星。通常一个app 有超过半数使用者在五星评等中只给出一颗星的评价,说明这个app 必定很有问题。


请注意截图中,每则给予一颗星的评论都获得九成以上的认同。

无独有偶,最近Android 的使用者对Facebook app 也很有意见:

一开始Facebook 的iOS app 不是长这样

其实一开始Facebook 的iOS app 不是现在这样,最初它是由Firefox 浏览器的共同创始人Joe Hewitt(他另一个有名的作品是Firefox 的插件“Firebug”,目前有超过三百万人(注1)天天使用)所开发出来的,用了一部分他自己的开源码专案“Three20 project”(注2),堪称当时iOS app 的范本,许多有名的app 也是参考他的设计(例如LinkedIn)。但是在Joe Hewitt 离开Facebook 后,接手的团队重写了Facebook app。

几天前mobtest 在他们的部落格上发表了一篇文章“Here's why the Facebook iOS app is so bad (UIWebViews and no Nitro)”(注3),说明为什么Facebook 的iOS app 会这么糟糕。

他们列举出几个Facebook iOS app 的问题:

app 的速度太慢

不一致的讯息

有时候代表“通知”的图示告诉你有新的通知(例如你的留言有人按赞),但其实没有。

app甚至比移动版网页还慢

大家都在用速度越来越快的iOS原生app时,Facebook app竟然比移动版网页还慢,而后者提供了几乎与前者一模一样的功能。

一大堆bug

超慢的显示、照片上传会失败、文字框会消失、缺乏分享功能。

问题:HTML、UIWebView、没有Nitro JavaScript 引擎

HTML

超文本语言(英文:HyperText Markup Language,HTML)是为“网页创建和其它可在网页浏览器中看到的信息”设计的一种标示语言。(参考来源:维基百科)

UIWebView

You use the UIWebView class to embed web content in your application.

您可用UIWebView这个类别(class)将web内容嵌入到您的app。(参考来源:Apple iOS Developer Library)

Nitro JavaScript引擎

JavaScrip t引擎是一个专门处理JavaScript脚本的软件程序,一般会附带在网页浏览器之中。而Nitro JavaScript引擎是Apple为旗下的浏览器Safari开发出来的JavaScrip t引擎。(参考来源:维基百科)

Facebook iOS app 是从facebook.com 下载REST(XML 格式而非JSON)与HTML。HTML 负责使用者的timeline、个人资讯及社团的timeline。我们可以发现有时候Facebook app 在下载HTML 和图片/样式(stylesheets)/JavaScript。为了在app 里显示HTML,开发者就用了iOS 浏览器Safari 里的一个物件(component)“UIWebView”,它虽然方便,却也很危险。HTML 档案不小(15kb),包括了图片、样式和JavaScript 的连结。由于UIWebView 无法让开发者对内容做有效的快取,每一次Facebook 都会重新下载整个Timeline 的HTML 档案,而UIWebView 的效能又比不上移动版的Safari,不但缺乏Nitro JavaScript 引擎,也有安全上的疑虑。

mobtest 的作者特地用自己的iPhone 4(搭载iOS 5.1.1)执行SunSpider JavaScript Benchmark,结果在移动版Safari 的效能是iOS 原生app 里UIWebView 的三倍快,也难怪使用者会觉得慢。而且为了UIWebView 跟原生app 之间的沟通,必须靠JavaScript bridge,这东西很棘手,不但慢而且还不安全。

对于相同资讯的呼叫无法同步

前面提到资讯不一致的问题,是因为REST 呼叫完成后,会回传XML 资料,先确认“通知”的数量(https://api.facebook.com/restserver.php),然后再透过一个独立的呼叫撷取通知的内容(https://api-read.facebook.com/restserver.php)。由于Facebook 会回传不一致的讯息,导致使用者遭遇通知数与实际内容不相符。

那为什么Facebook 不干脆全面使用原生app 的技术就好?

1、因为HTML比Objective-C更容易调整内容的呈现方式,后者在处理一些状况时候很麻烦,例如文绕图的样式。

2、使用HTML跨平台容易许多。iOS、Android、BlackBerry、Windows Phone使用技术都不同,造成开发者极大的困扰。要在不同的平台中分享内容及功能,靠HTML容易的多。

3、HTML更符合Facebook的连续布署程序。Apple的审核时间太长,不符合Facebook布署程式码的流程(每次都要送审的话那还得了)。

4、世界上还有许多不是iPhone/Android的功能手机(feature phone)。一些比较没那么富裕、先进的地区(例如非洲),很多人都是透过功能手机来使用Facebook。

5、全世界只有一个Facebook。当你我的朋友都在用Facebook的时候,就算它的app再糟糕,我们也只好继续忍耐。

至于Facebook app 到底有多困扰使用者,我们可以参考一下Facebook 产品总监(Director of Product)、Firefox 浏览器的共同创造者Blake Ross 在Facebook 公开上市前夕发出的一个讯息(注4),他说明天Facebook要公开上市,问使用者们今天晚上Facebook 是不是该做点什么、各位使用者们希望加入什么功能(或是修好哪些问题),结果就有人回应:

“Fix the Android app. It is ridiculously slow.”

“A mobile app that works.”

“Fix the iPhone app.”

“Please fix the mobile app.”

(大家可以去Blake Ross 的信息网页,在大家的留言中搜索app XD)


注1:Firebug :统计信息显示板::Firefox的插件

注2:Three20

注3:Here's why the Facebook iOS app is so bad (UIWebViews and no Nitro)

注4:Blake Ross的Facebook墙上照片

本文由i黑马作者Vito Corleone整理自inside