本文参考 High Performance Browser Networking,获取更多详细内容请查看原文。
移动网络性能优化
在构建移动应用时,确保性能与用户体验至关重要。这意味着要通过降低延迟、提升速度和优化资源使用来提高应用的整体效率。为了实现这一目标,我们需要将服务器和数据的分布更靠近用户,同时优化TLS配置等网络协议,才能在移动设备上取得良好的响应效果。
具体来说,移动网络给应用程序的设计带来了独特的挑战,这包括设备屏幕尺寸的限制、无线电接口的特殊性能表现以及对电池消耗的影响。这三者之间相互影响,致使我们在设计和开发时需要进行权衡。
虽然应用的界面设计往往得到更多的关注,实际上,许多性能问题往往源于对网络性能的误解。尽管协议可能相同,但移动数据的物理传输层的差异可能导致响应速度下降、延迟波动,甚至对电池寿命产生影响。这就要求我们在开发过程中,务必考虑到无线传输的特点。
我们将不详细探讨显示层的问题,因为这一点对于不同类型的平台和应用有所差异。但可以肯定的是,电池和无线电限制的影响是普遍存在的,这也是我们下一步要讨论的关键内容。
维护电池寿命
电池续航一直是移动设备的痛点,不论是设备制造商、运营商,还是用户都对此十分关注。每当考虑优化移动应用性能时,不妨问自己:这样的设计如何影响电池寿命?答案通常是极具启发性的。
移动网络的电池消耗与总体网络性能密切相关。无线电接口的结构本身就为了延长续航而设计,但若高强度使用无线电,归根结底会迅速耗尽电池电量。因此,我们的移动应用需要尽量减少无线电工作的频率,让无线电处于非活动状态的时间尽可能延长。
实际上,这里的关键是尽可能在无线电开启时进行数据的批量传输,而在其他时间尽量减少对网络的请求。尤其需要注意的是,无论是WiFi还是移动网络,其延迟与传输效率都各有特点,这也是我们需要调整策略的地方。
减少无效的数据传输
不论是进行小数据请求,还是处理大数据的传输,使用无线电都会产生一定的功率成本。这一点对于电池续航显得尤为重要,要意识到,移动网络上的间歇访问会给性能带来巨大的负担。
理想的做法是通过推送通知而非轮询技术来进行更新,这样不仅能够减少不必要的数据传输,同时也能够有效降低功耗。此外,尽可能合并多个请求,将它们集中在一次网络调用中,也能够显著提高效率。
对于那些需要及时更新的场景,我们应当仔细设计更新的频率,确保其与用户的期望相符。聚合入站请求并将其延迟至无线电处于活动状态,可以进一步提高能效。
避免不必要的Keepalives
在移动网络中,一个常见的误解是应用程序需要持续保持无线电的活跃状态来维持TCP或UDP连接。事实上,一旦连接被网络运营商维护,无线电可以在低功耗状态下保持,因此不必刻意维持活动。
多数运营商会设定一定时限(通常为5-30分钟)来保持连接不被中断,如果发现连接频繁中断,可以尝试检查服务器和网络配置。
预见网络延迟
在移动网络中,单个HTTP请求的网络延迟可能达到数百到几千毫秒。高延迟的产生原因包括网络往返、DNS解析以及TCP和TLS握手等层面的时间消耗。即使在最佳情况下,存在多个环节也会影响请求的速度。因此,考虑这些额外的开销是非常重要的。
例如,在4G下,优化的往返延迟约为100毫秒,3G网络可能需要更多时间,处理多个环节可能会导致总延迟更长。
管理RRC状态转换
移动设备空闲时,务必注意到RRC造成的延迟影响。每当设备需要发起网络请求,若无对应的数据迁移,就会导致额外的延迟产生,给用户体验造成影响。
由于不同无线网络的RRC状态管理不同,因此开发者需要对目标网络有全面的了解,并在应用设计中充分考虑这些限制。
将用户互动与网络传输分开
一个有效的方案应当提供及时的用户反馈,即使在网络请求需要较长时间才能完成的情况下。确保在用户交互后尽快给予反馈,同时在后台启动必要的网络请求,这样可以避免用户感受到延迟,提升应用的响应速度。
设计可适应的网络接口
用户面对的最糟糕体验之一是网络不稳定导致的应用崩溃。因此,设计鲁棒的应用可以缓解潜在问题,比如在连接不稳定的情况下优雅降级,确保用户在不同网络环境下都有顺畅的体验。
利用Burst Data Strategically
在移动网络中,进行突发数据传输是能够有效提升性能的一种方式。将请求打包,迅速完成下载,并让无线电迅速返回空闲状态,可以达到最佳吞吐量。建议在设计应用时充分利用这一特点,最大限度地提升设备的能效。
优化WiFi利用
如果可能的话,尽量采用WiFi进行数据传输,特别是在大文件传递时,能显著降低电池消耗并避免RRC相关的延迟。这对于许多应用尤其重要,特别是当需要进行数据密集型操作时。
应用协议的优化
综上所述,虽然我们已经全面分析移动网络的物理层特性,但应用层的协议与最佳实践同样不可忽视。优化传输层的机制,并针对特定的应用协议进行调整,将为最终的用户体验带来显著改善。