Facebook首席iOS软件工程师:开发原生iOS应用的几点心得
什么因素最影响用户的使用一款应用程序行为?怎样提升用户的体验?Facebook的iOS应用的首席软件工程师Adam Ernst今天在Menlo Park,和我们分享了Facebook iOS团队在开发过程中遇到的问题,找到的解决方案,以及Facebook移动应用未来的发展。
用户的要求很简单:无缝连接!速度!
Facebook是一个基于Web起家的互联网服务公司,虽然今年Facebook的各位高管频繁表示Facebook是一家移动公司,这也无法改变其创始基因。Adam也提到,用户需要的,是无论在网页上还是移动终端上都能有一样的体验, 用户其实根本不需要你特地为移动终端做一个独一无二的交互界面。然而,这个“无缝连接”的一致体验,其实比本身建立一个原生态应用更复杂。
Adam在演讲提到,当Facebook的移动应用速度提高了,用户的好评度就明显上涨了。没有人愿意等着一个应用加载2分钟都没有能够刷新出新的内容,速度是Facebook iOS团队一直致力提升的地方,他也分享了更多关于速度的问题。
HTML:无缝连接应用开发平台
HTML作为应用开发平台带来的三大好处:
- 时效性:HTML能够让用户在最短的时间内体验到你应用的改变。Adam提到之前Facebook曾新增了一个功能,结果一夜之间就有五千多位用户使用,并给出了及时的回馈。
- A/B测试:A/B测试是一种交流性的新产品测试方式,往往是针对一个功能同时推出两个不同的版本来测试市场反应,并选择最佳的方案。加上高时效性的特点,可以很快选择出适合市场的版本。
- 只需一次编码:没错,基于HTML的应用,只需一次编码,就可以完成网页、iOS、Android等不同运营系统的应用。这对开发者来说当然是个福音, 作为Facebook,这也是不会放弃HTML5的一个原因。
应用加速小贴士
说到如何加快速度,Adam有颇多心得:
- 缓存数据客户端:
将数据缓存在本地存储器上的速度远远快于把数据存在云端!哪怕只有一小部分数据,你也会明显地感觉到速度的差别。并设计一个小型的数据库来记录本地数据,Adam也给我们看了Facebook iOS应用存储在客户端的数据,也有70多张表!
- 从数据存储器上批量加载:
比较下列两组编程的区别,或许你能看到如何让你的应用运行地更快!
- 团队合作
就像由一个人单独完成一件事情会需要更长的时间一样,你可以把应用的任务分配给不同的程序来完成。用网络线程(Network Thread)下载和解析数据;用渲染线程(Render Thread)去获取和呈现用户的故事,用大数据调度中心来完成后台任务,并不断循环该线性过程以达到最完美状态。
- 保持图形处理器GPU的愉快运作
我们要做的是尽量减少不必要的图文量,比如说多层重叠的图片会需要更长的加载时间,不如就用一层不透明的颜色。再比如说,简单的文本会比复杂的文本内容来的快的多。同时,你可以尽可能地在有条件的时候缓存一些特定的版式和图片,来减少图形处理器的工作量。
- 不要全屏显示加载状态
如果你是用户,愿意看到上面的小转轮不停地转动5分钟还没有完成加载吗? Facebook的要求是,永远不要出现这样整屏的等待状态!Adam说,宁可给客户显示2天前的状态,也别让屏幕空着,一定要给用户一些可以互动的内容,而非只能在一边干等待。