性能优化之老生新谈:飞一般的iPad

2020 年 5 月 09 日

性能优化之老生新谈:飞一般的iPad

随着移动互联网玩法的不断升级,性能优化变得越来越重要。在追求移动端 APP 体验的背后,需要在性能方面做到极致。本文通过对优酷 iPad 在启动耗时、核心页面加载耗时、页面帧率等方面的优化,验证了性能优化在提升用户体验的同时,拉升了高活用户占比。

一、写在前面

在相同的系统 iOS 下,iPhone 和 iPad 有着不同的用户群体,导致同一 APP 的不同终端,机型占比相差甚远。对于优酷 iPhone 和优酷 iPad 而言,按设备的硬件性能、系统版本分析,用户分布差异较大,迫使优酷 iOS 的同一功能在 iPad 的降级力度大增。比如 2019 年双 11 猫晚直播间,优酷 iPad 端除了能看“简洁”的直播和简单的文字评论外,还不能参与其他直播互动。

优酷 iPad 低端机型占比在三成左右,为了提升低端机型的用户体验,性能优化不失为一种较高投入产出比的方案。

二、优化策略

性能优化开工前,我们对现状做一次全方位摸底,采取“靶向策略”,逐个进行优化。具体步骤如下图:

1)指标收集:结合用户行为分析,排序业务场景,根据场景优先级,结合客诉等数据,逐个场景分析性能痛点,搜集性能指标。然后根据时间安排、人力投入等筛选出一级指标、二级指标;

2)行业分析:确定技术指标后,与同类 APP 进行指标的性能对比。根据性能差异和投入产出比,进行技术立项;

3)目标制定:结合业务,分析性能漏斗,得出各项性能天花板及初步优化方案,制定合理的技术指标目标;

4)逐个击破:性能折损漏斗深度分析,根据折损漏斗和瓶颈,进行折损点排序,从高优折损点逐个优化;

5)分桶实验:验证某个优化的可行性和效果,排除干扰因素;

6)灰度验证:结合分桶实验,灰度上线验证优化后的效果;

7)纠偏补漏:根据灰度后的数据分析,纠偏优化手段。步骤 4~7 反复进行,逼近目标值;

8)数据分析:完成各项指标,并留意和分析性能优化对各项业务指标的影响;

9)汇报总结:图表形式汇报总结,项目交差;

10)沉淀传承:输出文档或技术博客,供他人学习或借鉴。

三、前期准备

性能指标因机型差异而制定相应的目标值,根据优化基线和目标值应该选出不同分级的代表机型,确定统计口径,所以在开工前,我们需要做以下几点:

  1. 机型分级

根据机型分布、机型内存占比、机型 Abort 占比等信息进行 iPad 机型分级,将所有设备划分四个等级:高、中、低、超低端机型。

  1. 实验室测试设备
机型 系统版本 评分(安兔兔) 分类标准
iPad Pro(10.5 inch) 11.3 186972
iPad Air 2 10.3.3 107239 终端
iPad mini 3 9.3.5 69442 低端
iPad mini 9.3.5 45575 超低端

结合各机型的用户占比和评分,选定高、中、低、超低端机型代表,供实验室测试使用。

  1. 统计口径和优化基线

与 QA 和各端约定统计口径,便于横向、纵向对比。根据统计口径进行实验室数据采集,并结合同行 APP 性能分析,确定各项优化指标和目标值

  1. 性能工具和平台

工具接入:掌中测(性能分析工具)、诺贝尔(分桶实验)、ImageOptim(图片压缩)。

平台接入:CTM 代码覆盖平台、baymax 平台、APM 数据平台、竞品分析工具。

  1. 目标制定

时间内低端机型(iPad mini3)启动耗时低至秒;播放页加载耗时低至秒;重要页面的帧率达到FPS。

  1. 人力安排和规划

根据 2.4~2.7 的步骤按版本制定计划,并协调好测试资源。

四、优化实践

  1. 启动耗时优化

启动优化宏观层面有三大抓手:pre-main 阶段 -> 启动项阶段 -> 首屏渲染阶段;微观层面因业务差异而千差万别。

启动阶段 优化策略
pre main
有效方案:load 方法优化、去动态库化、包瘦身
启动项 启动项梳理:划分主启动项和闲时启动项
基于 instrument 工具定位耗时方法(阈值:50ms),各个击破
首屏渲染 UITabbarController 的子控制器懒加载
预初始化:闪屏阶段初始化首页
缓存机制:缓存首页数据
缓存预加载机制:首页初始化时异步加载缓存
懒加载机制:控件使用时再加载
降级策略:低端机型功能、视觉降级
耗时优化:基于 instrument 定位耗时方法(阈值:30ms),各个击破
  1. 播放页加载优化
抓手 方案
缓存策略 UPS 缓存
CDN 缓存
预请求策略 播放页数据预请求
降级策略 低端机型阉割部分次要功能
  1. 频道、热点加载优化
抓手 方案
频道管理策略 基于 LRU 的频道管理机制
缓存策略 频道数据缓存
预加载策略 频道预加载
频道数据预加载
分页预加载
异步策略 数据异步处理
异步渲染
  1. 帧率优化
抓手 方案
预加载策略 页面数据预加载
异步策略 数据异步处理
异步渲染
降级策略
其他策略 耗时方法优化

五、数据对比

  1. 启动 / 加载耗时优化前后对比

通过上图,优化前后各类耗时都有明显提升,尤其是播放页的热启动耗时。优化后的低端机型各项耗时指标远超选定的两款同类 APP 对应指标。

  1. 帧率优化前后对比

通过上图,优化前后低端机型各页面的帧率有明显提升,接近中、高端机型帧率,且远超选定的两款同类 APP 对应页面帧率。

  1. APM 大盘数据(优化前、后)

1)启动耗时分布占比

优化后,启动耗时占比分布整体大幅前移,说明线上用户的启动耗时大幅下降。

2)播放页加载耗时分布占比

优化后,播放页加载耗时占比分布整体大幅前移,说明线上用户的播放页加载耗时大幅下降。

  1. 高活用户占比

优化后,高活用户占比相对提升 5.6%。

作者 | 阿里文娱高级无线开发工程师 亖石

2020 年 5 月 09 日 18:57 851

评论

发布
暂无评论
发现更多内容

第二周 作业二:框架设计学习总结【未陌】

a d e

设计模式 架构设计

架构师第二周总结

悠哉

架构师训练营 - week2 - 个人学习心得总结

谭明华

架构师训练营第 1 期 架构师训练营第一期

五种简单高效的拆分用户故事的方法

Bruce Talk

敏捷 Agile 用户故事 User Story Product Owner

二、搭建Jupyter Notebook环境

刘润森

Python

第二周作业二-学习总结

道长

架构师训练营第 1 期

const关键字应用总结

C语言与CPP编程

程序员 编程语言 C语言

原来我写的软件里面都是臭味 - 架构师训练营第 1 期 - 第二周总结

Todd-Lee

架构师训练营第一期

字节3-2专家3年心血终成IT运维之道PDF(IT运维精髓)

周老师

Java 编程 程序员 架构 面试

四、学编程语言前,不了解Git,怎么入坑

刘润森

Python

六、乘胜追击,将剩下的Git知识点搞定

刘润森

架构师训练营 - week1 - 个人学习心得总结

谭明华

框架设计-第二周作业

睁眼看世界

软件设计原则 架构师训练营第一期

第二课框架设计课后作业

Geek_michael

第二周学习总结

追风

架构师训练营第 1 期

极客时间架构师培训 1 期 - 第 2 周作业

Kaven

数字与能源,交织成新基建的摩比斯环

脑极体

架构师训练营第一期 - week2 - 命题作业

谭明华

架构师训练营第 1 期 架构师训练营第一期

架构训练营 -week2- 学习总结

Prayer

面向对象 架构训练营

听说有人不了解柔性数组

C语言与CPP编程

程序员 数组 编程语言 C语言

架构师训练营第 1 期 - 第二周 - 作业提交

Todd-Lee

架构师 架构师训练营第 1 期

前言、Python是真的火,还是炒得火?来看看它的前世和发展

刘润森

Python

食堂就餐卡系统设计

谭明华

架构师训练营第 1 期

C语言/C++基本语句编程风格

C语言与CPP编程

程序员 编程语言 C语言

架构师第二周作业

悠哉

架构师训练营第 1 期

架构师训练营 1 期 -- 第二周

小河

架构师训练营第 1 期

架构师训练营 Week2 作业

lggl

作业 架构师训练营第一期

三、新手Jupyter不会用,我十招教你盘她

刘润森

Python

五、开始Github和码云之旅,新手如何上路

刘润森

Python

架构师训练营第二周作业

成长者

C语言C++中assert的用法

C语言与CPP编程

程序员 编程语言 C语言

性能优化之老生新谈:飞一般的iPad-InfoQ