页面切换提速30%!京东商城APP首屏耗时监控及优化实践
https://mp.weixin.qq.com/s/vIG_x1MWC33HKV1GxalVHg
网络接口请求可以从接口结构合理性及多接口并行度两个维度进行分析。
接口合理性:接口耗时大可以减小网络请求数据大小,分析数据结构的合理性,是否存在冗余的数据,或者通过压缩的方式来减小网络数据大小(如gzip)。
接口并行度:接口并行度主要从接口总耗时和接口累加耗时两个维度分析,接口总耗时指从第一个首屏接口开始发出请求到所有首屏接口请求收到响应的时长,接口累加耗时指每个首屏接口耗时的累计,接口总耗时/接口累加耗时越小说明接口并行度越好。网络接口总耗时远大于网络接口累加耗时,说明接口与接口请求之间存在间隔。
接口总耗时T/接口累加耗时(t1+t2)>1,说明接口与接口之间有间隔(如下图)。接口总耗时T/接口累加耗时(t1+t2)<1则说明接口与接口之间并行度较好。
接口预加载&接口缓存
在Activity初始化的过程中采用后台预加载的方式提前执行网络数据请求(从上述Activity生命周期方法耗时的统计看,京东App的Activity初始化耗时在90ms左右)。
除了接口预加载,也可以通过数据缓存的方式来减少请求次数从而减少首屏耗时,每次进入页面先加载有效期时间内的旧数据,网络实时数据获取到后diff更新,并将数据再次缓存。
网络接口并行化
提高接口执行的并行度并非简单粗暴的将所有接口都单独创建线程并行执行,而是要根据各个接口耗时情况,以及资源加载情况合理设计请求时序。将所有网络线程以及资源加载并行化可能造成线程数溢出或因大量线程同时执行导致内存暴涨等情况(如下图)。
可根据耗时最长的接口来合理并行化,减少执行线程数的情况下同时减少网络接口总耗时(如下图)。