移动互联网人口红利见顶,用户增长放缓,移动互联网各公司都在经历从服务好增量用户到服务好存量用户的思维转变,而低端机又是存量用户中重要的组成部分,因此低端机的性能优化变得尤为重要。
性能优化是最重要的优化体验的技术手段,重理论与实践相结合,技术挑战大,百度App性能团队也因此成立低端机专项攻克体验难题。本专题以低端机启动性能优化的视角,覆盖技术架构上的性能设计、性能问题定位、防劣化机制等方面最佳实践,最终形成性能优化闭环。
以低端机为重点,辐射中高端机,通过技术和产品上的深度优化,可感知的提升用户体验,实现扩大用户规模、提升留存和提升收入的目标。
项目之初有几个灵魂拷问:
标准疑问:如何定义低端机?
结合百度App产品现状和手机配置分布,参考业界相关设计,自建低端机标准,采用评分机制,保障评分客观和稳定,保障低端机占比的合理性;
主场景及指标疑问:如何挖掘优化场景并抽象指标,衡量低端机性能?
结合应用商店用户反馈、百度App反馈和论坛反馈,决定低端机优化主场景为点icon启动场景,次场景为端外调起场景,后续在应用全生命周期投入;
基于场景制定反映用户实际体验的性能指标,指导性能优化,量化性能工作;
提效疑问:如何快速发现性能问题?
借助工具提效,自建稳定且高效性能工具基于目前已有工具二次开发,提高发现问题效率;
优化疑问:如何系统化的优化性能问题?
建设应用级的基础调度机制,服务于业务,并协助业务优化性能;
挖掘应用级的基础机制痛点,优化并升级基础机制,快速提升性能;
防劣化疑问:如何避免性能优化的同时出现劣化问题,并打造劣化问题修复自运转的飞轮?
建设全研发流程的问题发现与定位的基础机制,简称版本防劣化;通过自动化测试和自助化文档服务,做到自动化测试、自动化分析、自动化分发和自助化解决,建设指标的线上线下可观测体系。
基于上述疑问的理解,将低端机启动性能优化拆分为3个子方向,分别为观测设施、基础设施和业务优化。
本文为低端机优化-启动优化项目的概述篇,整体描述下观测设施、基础设施和业务优化三个方面,后续会陆续发布性能工具2篇(Trace工具+Thor Hook工具)、性能优化1篇、防劣化体系1篇。
低端机定义,目前是按照机型评分PV/UV占比低于15%的评分定义为低端机,机型评分有:静态评分、动态评分和综合评分(静态评分和动态评分加权值)方案,目前线上百度App以静态评分为主,动态评分受运营等影响有波动,业务可基于动态评分判断设备当前负载情况。基于Android和iOS机型分布差异,Android以模型计算为主,iOS以配置表为主。
Android:机型种类繁多,无法枚举,因此需通过手机的硬件配置信息(CPU/GPU/内存等),利用训练的数据模型,多维度计算给出一个综合评分,低端机占大盘比例15%。
iOS:机型种类优先,可枚举,因此可通过配置表直接读取机型评分分数,低端机占大盘比例15%。
通过本地收集应用性能指标,目前实现了性能维度(启动速度为主)作为判断依据,线上收集大盘数据,并拟合生成启动时间-性能评分,生成模型,通过传入性能指标参数,得出动态评分。
根据静态得分和动态得分,按照权重计算,得出最终得分。
静态得分* weight + 动态得分 * (1 - weight) = 设备最终得分启动性能指标。
TTI (Time To Interactive),代表用户可输入的时间。TTI概念来源于Web,先来看下面这张图:
图中涉及几个关键名词,FCP (First Contentful Paint) 首次内容绘制,FID (First Input Delay) 首次输入延迟,从图中图示可知TTI指标基本可代表主线程的流畅程度。
Web端TTI指标优劣评估如下,来源于https://web.dev/interactive/。
基于Web端性能指标,结合移动端现状抽象TTI指标,衡量应用打开后,用户可输入的时间,主要包括常规启动TTI衡量点击icon进入手百性能,首次安装启动TTI用于衡量新用户首次安装启动应用的启动性能,在百度App上TTI起点为应用进程创建时间戳,比较接近于点击桌面的时间戳,结束点为主线程首次空闲。
长久以来,开发者为了追求更快的渲染速度而对页面进行优化,但有时,这会以牺牲 TTI 为代价。当用户尝试与看似具备交互性但实际上并非如此的页面进行交互时,用户可能会有如下两种反应:
因此,为了避免这个问题,需尽一切努力将页面渲染完成时间和 TTI 之间的差值降至最低。
优化犹如进攻,防劣化犹如防守,只有做到攻守兼备,才能稳健优化。如何搭建防劣化机制,观测线下和线上的问题及指标情况,变得尤为重要。线下防劣化是第一环,及时发现劣化问题并提升问题分析效率,保障测试覆盖度,尽量覆盖用户的核心场景;线上防劣化则是在线下未发现问题并上线后,快速发现并快速定位线上问题。本文中会做简短阐述,后续会有专文来阐述这块内容。
在代码主线分支(如master分支)或者研发同学开发分支,可提交防劣化任务自动化测试,目前百度App已实现Daily的自动化测试与分发,每个版本防劣化基本不需要投入人力,流水线自动分发,业务同学自助式解决问题。
Daily测试中主要有如下几个步骤:
旨在快速发现已带到线上的劣化问题分析与归因,主要包括实验防劣化和函数级防劣化。
实验在线下比较难测试完全,极有可能在实验分支放量期间,线上数据出现变化,需结合实验平台,打通数据平台,观测线上核心指标变化,此部分作为线上防劣化的关键一环。
在实际生产中,发生过多次实验放量导致的劣化,均通过此方式定位并归因,具体实验数据表现如下:
备注:业务显著性需要观察多日数据,截图为一日数据。
函数级防劣化主要指函数级别打点报表观测能力建设与自动化分析建设。
基础设施是项目中最核心的组成部分,主要工作有高效性能工具、高性能组件和调度框架,本文中会做简短阐述,后续会有专文来阐述这块内容。
TraceView/CPU Profiler性能损耗较大,原生Systrace无法定位应用程序代码问题,随着优化逐渐进入深水区,如何快速定位和挖掘问题,成为日常工作中急需解决的问题。百度App在项目中开发了两套工具,分别为Trace工具和Hook工具,Trace工具以ASM插桩为基础,结合Perfetto相关能力,做到可视化和自动化分析;Hook工具以Epic、Xhook等Hook能力为基础,设计插件框架,实现插件级的Hook能力,支持热插拔,整体架构图如下:
通过工具的建设,Trace工具可准确反映性能问题,分析效率提升明显,可发现锁、长耗时等问题,支持版本对比,为防劣化提供有力支持;Hook工具完备Hook能力,即用即插拔,可输出I/O、线程等系列问题。在工具落地中,支持了低端机启动性能项目外,也支持了诸多项目的顺利落地。关于工具的细节可关注公众号后续发稿。
在低端机优化-启动性能优化中挖掘出诸多基础组件的性能问题,比如系统原生组件性能差导致业务性能差问题,比如基础组件随着版本迭代或使用业务方逐渐增多导致性能差问题,比如引入的第三方SDK导致的性能问题等,对诸多基础组件做了基础改造,如Eventbus事件库,Fresco图片库、网络库等、也对系统相关机制做了优化,如ContentProvider、FileProvider等,本文中简单阐述两个比较有代表性的优化:SharedPreferences优化和ABTest锁优化,在后续文章中会对优化项做详细阐述。
原生SharedPreferences有首次读取性能差、创建线程多、卡顿/ANR,多进程支持差等缺点,从启动性能角度看SP加载时wait时长占比较大,主要原因是该线程加载SP时,会新创建异步线程执行文件加载,此时该线程处于wait状态,直到文件加载完成后该线程才可继续执行,须对此种情况做针对性优化。
通过调研Google DataStore、腾讯MMKV、滴滴Booster、头条等业界对KV存储做的相关优化,并参考其实现,最终在百度App中落地UniKV,突破系统限制,彻底解决原生SharedPreferences有首次读取性能差、创建线程多、卡顿/ANR、多进程支持差等缺点。
核心实现主要有:
对比业界对KV存储做相关优化,均有不同程度优势,目前在百度App大规模使用,接入文件100+,优化线程数100+,优化TTI约1.2S。
实现 | 多进程支持 | 线程个数优化 | 卡顿/ANR | 是否支持强类型 | SP接口对齐 |
---|---|---|---|---|---|
UniKV | √ | √ | √ | √ | √ |
DataStore | × | √ | √ | √ | × |
MMKV | √ | √ | √ | × | × |
Booster | × | × | √ | √ | √ |
头条 | × | × | √ | √ | √ |
通过工具可看到锁相关信息,比如可以看到这段Trace,具体如下图所示:
在项目中锁相关优化也是非常关键,以ABTest优化举例。从Trace文件中可以看到在ABTest模块中出现了较多的锁信息,读取性能差,因此对ABTest模块进行了全面的摸底和分析,ABTest问题主要表现为:
针对上述几个问题,对ABTest做了重构,框架设计如下:
核心优化主要分为初始化优化和数据读取优化:
优化效果:
百度App启动过程复杂,涉及业务众多,各预加载任务的执行诉求各有不同。在以往业务优化中,通过预加载、预链接、预渲染等各种“预”操作,对性能指标和产品体验做了相关优化,业务完全优化掉耗时是比较理想的情况,会有较多业务依然保留“预”操作的诉求,因此需要建设一套调度框架,输出至业务方,业务可快速接入,快速解决优化业务的“预”操作带来的性能问题,达到启动性能和业务指标的平衡。本文中对此部分做简单阐述,后续也会相关文章详细介绍此部分优化。
整体框架图如下:
调度框架的核心为智能调度,输入有两部分,主要是任务和信息采集:
输出为不同的调度形态,有个性化调度(不同用户运行时初始化不同业务)、分级体验调度(用户不同配置机型不同效果)、精细化调度(基于场景做调度)、分优先级延时调度(任务延迟调度支持设置优先级,调整任务顺序)和首页UI并行渲染技术(主要指商业闪屏和主页并行渲染),业务可根据预加载任务执行诉求快速接入调度实现优化。在任务调度中,会为特殊业务做针对性调度,赋能业务,如闪屏和首页并行渲染,提升商业请求成功率,进而商业收入。
与业务协同,在技术和产品方面深度优化启动性能,主要流程如下:
项目持续1年半,共经历了3个阶段:夯实基础阶段、进攻突破阶段、精细管控阶段。
第一个阶段:夯实基础阶段
第二个阶段:进攻突破阶段
第三个阶段:精细管控阶段
低端机优化-启动性能优化项目完成了基础设施、监控设施和业务优化方向的建设,实现可感知的用户体验提升,TTI指标获得明显优化效果,常规冷启动TTI Androd 优化50%+ ,iOS 优化40%+ ,首次启动TTI:Android 优化 40%+,iOS 优化30%+ 。在项目中,积极与用户增长和商业的同学合作,也均取得不错的结果,百度App也将优化经验、基础机制、基础工具输出至矩阵产品,助力矩阵产品的性能提升。通过一个视频展示下优化的效果(测试环境为小米5,4核,3GRAM,Android8.0,2016年上市,公司WIFI):
启动性能是 APP 使用体验的门面,启动过程耗时较长很可能导致用户流失,启动场景作为资源竞争、卡顿情况严重的场景,各个公司团队均投入了较多精力来进行优化,且优化技术层出不穷,虽然百度App在此方向做了非常多的优化与尝试,但路漫漫其修远兮,百度App会持续深耕启动性能优化,为用户带来极致的启动体验。
与此同时,专注点不仅局限于启动场景,也会将更多精力投入到应用全生命周期、各View系统的流畅度建设与优化上,深入优化用户体验。
参考资料
[1] Web指标FID链接:
https://web.dev/fid/
[2] Epic链接:
https://github.com/tiann/epic
[3] xHook链接:
https://github.com/iqiyi/xHook
[4] Perfetto链接:
https://perfetto.dev/docs/
[5] MMKV链接:
https://github.com/Tencent/MMKV
[6] Booster链接:
https://github.com/didi/booster
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/aomafRByyponPBiI79OoHQ
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。