大多数决定“提高应用程序性能”的团队都是从错误的地方开始的。他们打开代码,找到一些看起来丑陋的东西,然后对其进行优化。几周后,该应用程序仍然很慢,没有人明白原因。
问题并不在于缺乏努力。这是缺乏方法。没有测量的优化是一种昂贵的猜测。
本文适合那些已经了解性能很重要并且想要具体执行路径的人。它不是针对特定语言的教程;而是针对特定语言的教程。它是一个独立于堆栈工作的决策脚本。
第零步:在触摸任何东西之前进行测量
优化的黄金法则很简单但经常被忽视:你不能修复你没有衡量的东西。
在更改单行之前,您需要有参考号。该应用程序需要多长时间才能打开?滚动主列表时每秒传输多少帧?较重的屏幕会消耗多少内存?
没有这个底线,任何进步都是信仰。有了它,每个更改之前和之后都可以进行比较,团队可以发现真正有效的方法。
这里的典型错误是在错误的设备上进行测量。团队在开发人员的高端手机上进行了测量,得出的结论是一切都很好。诚实的测量是在真实公众的平均设备上进行的,即可用内存很少且系统版本过时的设备。
第 1 步:找到真正的瓶颈
性能遵循不公平的逻辑:几乎总是,大部分缓慢都来自代码的一小部分。
因此,第二步是在分配工作量之前找到主要瓶颈。正是由于这个原因,所有现代平台上都存在分析工具,它们显示时间实际花在哪里,而不是你想象的花在哪里。
一个常见的案例很好地说明了这一点。一个团队认为主屏幕缓慢是由于设计繁琐造成的。分析显示,该应用程序在打开时进行了多次连续的网络调用,一个等待另一个完成。瓶颈并不在屏幕上,而是在屏幕上。我参与了请求的编排。
把错误的事情优化得太熟练仍然是一种浪费。诊断步骤是将努力与结果区分开来的。
第 2 步:攻击初创公司
如果说有一个地方首先值得投资,那就是开业时间。它是最明显的指标,也是对第一印象影响最大的指标。
一些行动往往会在这里取得很大的回报。
推迟一开始不必要的事情。该应用程序不需要立即加载所有内容。用户还看不到的图书馆、辅助数据和屏幕可以等待。
立即展示一些东西。内容加载时具有可见结构和占位符的屏幕会产生速度感,即使真正的工作仍在进行。
减少打开时的同步工作。处理过程中任何阻碍第一个屏幕的事情都应该受到质疑。
例如,送货应用程序不需要在打开时加载整个菜单。它需要显示搜索和附近的餐馆。其余的内容随着用户的导航而出现。
步骤 3:驯服图像和媒体
在许多应用程序中,处理不当的图像是重量和缓慢的最大来源。
这里的要点归结为三个实践。以适合屏幕的尺寸提供图像,而不是下载一张巨大的照片并将其缩小到设备上。使用现代压缩格式。当用户滚动时按需加载图像,而不是一次性加载全部图像。
想象一个窗口中包含数百种产品的[市场0]。提前上传所有照片会导致应用程序崩溃并耗尽用户的数据计划。仅加载可见内容并预测即将出现的内容,从而改变体验。
步骤 4:处理列表和滚动
滚动是用户最能感受到流动性或缺乏流动性的地方。构造不良的长列表显然会崩溃。
基本原则是重用:系统不会为每个项目创建新的视觉元素,而是重用那些离开屏幕的元素。每个现代移动平台都提供了这方面的机制,忽略它们肯定会导致崩溃。
另一个预防措施是在滚动时不要做繁重的工作。计算、格式化和处理应该提前进行,而不是当手指在屏幕上滑动时进行。
步骤 5:将网络视为稀缺资源
在移动设备上,网络速度慢、不稳定并且对用户来说价格昂贵。将其视为无限且免费是一个代价高昂的错误。
三个实际步骤会产生影响。将始终不变的内容存储在本地,避免再次搜索已有的内容。合并请求以避免数十次往返服务器。并针对失败进行设计:当连接在操作过程中中断时,应用程序会做什么?
在没有信号的位置记录数据的现场团队应用程序需要离线工作并稍后同步。这不是额外的;这是定义应用程序是否对实际工作有用的步骤。
步骤 6:再次测量并重复
优化不是一个有终点的项目;这是一种习惯。最后一步是回到起点:再次测量,与基线进行比较,并决定是否值得继续。
这是一个使成熟团队脱颖而出的战略决策。知道何时停止。绩效收益递减。在某一点之后,每项边际收益的成本都远远高于其所能带来的收益。优秀的团队会意识到应用程序的速度对于受众来说是否足够快,并将精力转移到最重要的事情上。
他们背后的一步
如果有一个教训将所有这些步骤联系在一起,那就是:优化是一门优先级排序的学科。稀缺资源不是技术,而是团队的时间。
衡量、找到真正的瓶颈、解决最重要的问题并在正确的时间停止。诚实地重复这个循环,比任何单一技巧都能带来更多的结果。
表演不是少数天才的才能。这是拒绝在黑暗中优化的团队所采用的方法。
如果您的团队正在经历改进应用程序却看不到结果的挫败感,那么问题可能不是技术能力,而是缺乏流程。这里还有其他关于纪律工程和技术决策的文本讨论了这个主题。
另请阅读
- 【移动性能优化:无人能忽视的基础1
- [软件性能:开始优化的基本步骤2
- [原生 Android 开发:启动应用程序的快速指南3
- [应用架构-常见错误基础4
- 【移动转化漏斗:实例讲解工具5
- 【移动转化漏斗实践:如何日常操作工具6
