内容简介:如今,手机和各类移动端应用现已经成为人们日常生活的重要组成部分,因此,应用的数量不断飙升(如今已上线的安卓应用至少达到210万[1])。对于安卓开发商,在应用领域竞争日益激烈的背景下,打造可以使终端用户满意的应用正变得空前重要。作为安卓应用开发商的您知道使应用终端用户满意的关键是什么吗?答案是高性能。实际上,96%的终端用户都认为应用的性能非常重要[2]。下面,我们将讨论能够使终端用户获得满意的用户体验的五种方式。在进入正题前,我想先介绍一下高性能的定义以及它为何在使终端用户获得满意的用户体验方面至关重要。
如今,手机和各类移动端应用现已经成为人们日常生活的重要组成部分,因此,应用的数量不断飙升(如今已上线的安卓应用至少达到210万[1])。对于安卓开发商,在应用领域竞争日益激烈的背景下,打造可以使终端用户满意的应用正变得空前重要。
作为安卓应用开发商的您知道使应用终端用户满意的关键是什么吗?答案是高性能。实际上,96%的终端用户都认为应用的性能非常重要[2]。下面,我们将讨论能够使终端用户获得满意的用户体验的五种方式。
在进入正题前,我想先介绍一下高性能的定义以及它为何在使终端用户获得满意的用户体验方面至关重要。
高性能的安卓应用能够合理地使用设备资源,帮助终端用户迅速实现目标任务。实际上,高性能应用还可缩短终端用户体验到的感知延迟。
在这里,感知延迟是一个重要术语:它是指终端用户所体验的从点击按钮到界面发生变化这段时间内的时间差。根据终端用户所采取行动和数据获取来源的不同,我们可以有很多种方法来缩短感知延迟。
现在,让我们来分析一下终端用户互动和数据加载的五种情景,探讨作为安卓应用开发商的您能够采取何种方式来缩短感知延迟,并让应用对终端用户需求做出迅速且贴心的响应。
1. 从最近的资源加载
您所开发的安卓应用的终端用户遍布全球,并且毫无疑问,这些用户越来越依赖移动化的生活方式。
您的终端用户和向应用提供数据的网络服务器之间的距离难以保证始终处于掌控之中,而这也正是延迟变长的主要原因。
为了减少感知延迟,您应尽可能从距离较近的的资源向应用提供大部分的数据;此外,许多未授权的API请求可在最近资源被清除,这样就可以避免与后端服务器之间的往返传输,进而提高了对终端用户需求的响应速度。
Akamai智能边缘平台[3]可提供开箱即用的服务。借助Akamai,您可以让数据总是从最优化的资源加载,这样就可以提高应用的性能,您的终端用户也可以轻易地获取数据内容。
2. 缓存和预取
许多从网络服务器加载的资源常常都在不断地进行重复使用。智能缓存机制可以将对象或API响应存储一段时间,以供重复使用,从而缩短冗长的来回传输时间。许多网络或图像加载数据库已经可以提供这种功能,您可以根据需要进行配置。这些缓存对象能够瞬时加载,因此延迟时间很短,终端用户根本不会察觉到有任何滞后。
有了这些数据库,当缓存内容过期时,会对其进行标记,以便从网络中重新加载。根据这些信息,您可以为数据库设定保存再利用缓存对象的时间。许多这样的数据库也支持HTTP报文头,比如max-age等。这可以帮助您在无需加速应用更新的情况下控制缓存能力以及直接从服务器加载的缓存内容的生命周期。
然而,在例如提供直播体育赛事比分的应用等一些情况下,缓存可能并不适用。对于此类应用,作为安卓应用开发商的您可以继续从网络加载数据。如果您从最近的资源加载数据(请见上文),对于提升应用性能的作用并不显著。
在某些情况下,您可能知道终端用户下一步将要做些什么。例如,电子书阅读应用可以预知,当终端用户正在读一本书的某一页时,他们可能会向前或向后翻。基于这种认知,该应用可以提前预取几页然后进行缓存。这样,当终端用户翻到这几页时,页面就可以瞬时加载。
类似的,在电商应用中,如果终端用户浏览到第四行的商品,他们有可能也会翻看下一页的商品。如果应用能预取下一页内容并进行缓存,那么当终端用户翻到下一页时,数据就可以瞬时加载。
正如您看到的这样,您可以使用多种方式预取并缓存数据,以此降低感知延迟,从而提高终端用户的使用的满意度。
3. 迅速加载API的响应速度
应用频繁使用API。如果API响应能迅速加载,那么终端用户不必耗费太多等待时间,而将更多时间用于使用应用上。
为此,您作为安卓应用开发商需确保有尽可能多的应用从尽可能近的资源(即:网络边缘,请见上文)中加载。这样,只有那些必须访问源服务器的API请求,才需要经历可能长达半个地球距离的漫长“旅程”。
另一种方法是缩减应用和后端服务器之间传输的数据大小,以此加快API响应速度。为此,您可以探索Colfer[4]或谷歌的协议缓冲[5](也称为Protobuf)等数据格式,而不是JSON。在将数据传至网络之前需将数据转化为二进制,与JSON相比,这种格式可大幅缩减API请求/响应的字节长度。值得注意的是,为了启动与Protobuf的协作,您的网络服务器和应用都需要额外的投入;不过,在许多情况[6]下,采用Protobuf获得的性能提升远超过启动它所需做出的努力。
迅速加载API的响应速度、优化感知延迟的第三种方法是缓存或预取可预测且重复的API响应。在缓存时,作为安卓应用开发商的您可将API响应存储至本地数据库表中,这样读取速度就能比从网络中读取的速度更快。这个本地数据库可根据自己的逻辑加以清空或刷新,不过,从本地数据库加载,然后再刷新的过程有助于实现最佳性能及最短的感知延迟。
4. 优化图像和视频
除了API之外,终端用户还可能需要加载很多的图像和视频。一般来说,应用加载的图像也可在同一应用的网站等其它地方使用。
与移动端应用相比,使用电脑打开的网站图像对屏幕大小、分辨率和设备类型的要求有所不同。很重要的一点是,应用上的图像需要根据资源有限的移动设备进行优化。移动端应用上的视频亦是如此。
即便当这些媒体从最近的资源加载数据,它们也可能达不到最快的速度;因此,作为应用供应商,您还需要确定图像和视频是否得到了优化。这些对象的绝对大小以及全球移动数据网络的不可预测性很容易抵消您仅用就近服务器就能实现降低延迟的优势。
为了实现这种优化,需要确保移动端应用具有最合适的分辨率和大小,以便加载图像或视频。如果这些设备太大,那么下载就会花费很长时间;如果它们太小,那么在屏幕上则会显示马赛克。
Akamai图像管理器(Akamai Image Manager)[7]是一种可以帮助安卓应用开发商利用单一的高质量原图对诸多移动设备进行自动优化的解决方案。这种优化也可使图像和视频的缓存变得更加容易。如果设备类型数量有限,您也可以存储同一张图像的多份不同副本。
图像常常包括很多不常用于应用中的EXIF数据[8](例如,拍照时设置相机细节)。Akamai Image Manager可对此进行自动优化,不过您也可以利用tinypng[9]等服务手工清除这些数据。这种优化可以缩小图像文件的大小,从而缩短加载时间。
另一种优化方式是利用渐进图像和自适应视频流。借助这种优化,终端安卓应用就无需等待整张图像下载;应用可逐步地下载这些图像,并在其下载时就开始显示。这可避免终端用户进入空白图像视图,同时缩短感知延迟。类似的,自适应视频缓冲技术可根据网络条件动态地调整视频质量。当带宽较小时,它可调低视频分辨率,以便终端用户能看到部分视频,而不是仅看到正在加载中的屏幕。
除了PNG和JPEG图像,您也可以尝试WebP格式。虽然创建WebP格式的图像需要花费更多时间,但加载时却更加高效。在本地或网络加载过程中,尝试SVG图像是另一种节省磁盘空间的有效方法。
5. 优化本地动画和过渡
动画在帮助终端用户获得满意的用户体验、以及告知用户活动方面起着重要的作用。与性能相比,动画与感知延迟有着更明显的关系。
过长的动画加载时间会使终端用户感到烦躁和无趣;太短或卡顿的动画会让终端用户难以理解内容的含义。两种情况都会给您的终端用户留下不好的体验。电池耗量也是设计精良的动画必须考虑的一个方面,动画在提供愉悦的用户体验的同时,还需要做到消耗尽可能少的资源。
根据Material Design guidelines by Google[10],移动设备上较长的动画的长度为300-400毫秒,较短的动画为150-200毫秒。比这些更长或更短的动画可能会让人感觉有滞后或是难以跟上。Material Design guidelines on motion[11]是通过例子了解这些时间范围的好选择。
所以,为了让终端用户更好地理解短动画的内容,动画的持续时间应在150-200毫秒之间。类似的,任何过渡辅助(比如从一个屏幕转到另一个屏幕)都不应长于400毫秒。倾向于重复的动画(比如进度条)应遵循类似的原则。单段动画的长度可以在300-400毫秒之间,这样它就可以在进度条退出前进行循环。
如果您想了解更多关于人类感知动作的信息,请阅读名为Human Processor Model[12]的研究。
结论
高性能的关键是综合考虑数据细节并谨慎地利用资源。幸运的是,我们有很多种方式来实现这个目标。
除了上述五大秘诀之外,我还想向安卓应用开发商强烈推荐另外两种资源——The Art of Computer Programming[13]和Introduction to Algorithms[14],它们可以帮助您遵循最佳编码实践并利用最高效的算法,打造高性能的安卓应用,使终端用户获得满意的用户体验。
关于作者:
Aman Alam Akamai开发者布道师
[1]https://www.statista.com/statistics/276623/number-of-apps-available-in-leading-app-stores/
[2]https://content.akamai.com/PG7125-unlocking-mobile-application-performance.html
[3]https://www.akamai.com/cn/zh/about/news/press/2018-press/akamai-announces-platform-enhancements-designed-to-bolster-security-and-agility-for-digital-businesses.jsp
[4]https://github.com/pascaldekloe/colfer
[5]https://developers.google.com/protocol-buffers/
[6]https://auth0.com/blog/beating-json-performance-with-protobuf/
[7]https://developer.akamai.com/akamai-image-manager
[8]http://exifdata.com/
[9]https://tinypng.com/
[10]https://material.io/design/
[11]https://material.io/design/motion/speed.html
[12]https://en.wikipedia.org/wiki/Human_processor_model
[13]https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/
[14]https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 机器学习实践的10个小秘诀
- 进入 kaggle 竞赛前 2% 的秘诀
- [译] 帮你高效使用 VS Code 的秘诀
- 高速发展企业必备秘诀:SD-WAN技术
- 五年Python三大秘诀!日常生活不可或缺的秘密武器
- 1 个闭环 + 1 个案例,为你解读实现数据驱动的秘诀
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。