业务运维实战:腾讯是怎么优化APP用户体验的?
《业务运维实战:腾讯是怎么优化APP用户体验的?》要点: 作者简介:
引言当前,用户体验已成为一种新的产品价值.当技术实现不再是产品核心竞争力时,产品的竞争就是用户体验的竞争.而用户弹指间感知到的性能体验对于用户体验尤为重要. 移动互联网产品因为用户的手机型号繁多、手机操作系统版本不一致、app版本难统一等问题,很难在开发或测试环节就完全解决掉移动app的性能问题,这使得移动app产品在运维过程中,不得不面对用户体验不优、性能不佳的问题. 如何让开发可以高效定位性能问题? 让开发,测试,运维清晰的把控各个产品的性能状况? 我们结合了当前业界商用的APM技术,实现了一套腾讯社交运维的myAPM方案. myAPM是什么?APM(Application Performance Management)应用性能管理,它是一套集终端,网络,服务端性能管理于一体的监控方案.在这里,就不展开介绍了. myAPM,专注于移动端的性能管理.既能监控定位性能问题(卡慢),也能应用于日常的app性能运营分析,提升产品用户体验. 监控方式
在注入技术选型时,myAPM采用了类ASM的注入技术,其注入效率,校错能力,学习成本,都比ASM要好一些. 注入阶段
myAPM可以做什么?当前,我们利用myAPM的能力,主要从以下四个方面进行探索与实践:
一、Apk 包大小分析一个app,随着新功能的持续增加,其apk的大小也在不断地膨胀.Apk size的问题,越来越困扰和限制着开发同学,影响某些功能的上线,同时,也降低了用户体验. 同时,app运营时间越长,功能迭代 / 代码重构次数越多,“垃圾”代码(就是没有被实际调用过的代码)的数量就会越多. 由于代码量大,代码调用层次深,每个开发同学只负责部分功能开发.如果让开发同学人工去做全局“垃圾代码”的分析,显然,其难度很大,效率不高. 而myAPM的apk包大小分析,就是用来帮助开发同学,快速暴露这些“垃圾代码”,开发同学只须集中精力,针对梳理出来的问题代码,做进一步确认和清理即可. 1、Apk包大小分析原理
2、Apk包大小分析应用场景
3、Apk包大小分析特点
4、开源工具 & apk包分析可能有同学,会罗列出一系列开源的工具,也可以很方便地甄别出app这种无调用代码.但对于有调用关系的一条链路(一组方法),仅仅通过线下分析,无法判断其是否有被调用.我们只能利用线上大量用户的真实行为分析,更好地去判断和确认. 5、方法注入样例
通过一个唯一ID(14236)来上报,既避免了代码中敏感信息的泄漏风险,也大大节省上报量. 6、Qzone –android应用实例Qzone android app,针对业务代码以及第三方包代码,采用类无调用分析.(类中所有变量或方法,没有被引用或调用.) 内部测试阶段: 在内部测试中,由于机型,测试用例有限,分析结果是42%的类没有调用或引用. 灰度外网阶段: 在灰度外网用户后发现,所有类都被调用或引用.但40%类被调用次数少于10次.由于灰度用户是50W,即40%的代码只有万分之二的用户有调用.针对这些,后续我们可以分析,调整这些类的启动加载顺序(如:延时加载). 结论:
二、App卡慢分析在app用户体验上,除了crash故障外,相信app主线程卡慢(负责与用户交互的线程),是用户最不能忍受的. 1、工作原理myAPM卡慢监控,实现对目标代码的“方法粒度”的注入、卡慢监听. 其本质,是在目标方法调用的前后,注入时间,进行卡慢监听及分析.原理图,如下: 2、卡慢分析全流程
说明:
3、卡慢实例在主线程卡慢监控中,比较常见的案例是:主线程加载文件,底层DB读写,图片处理这些比较耗时的操作.我们优化的方案,通常是将这些耗时操作移到异步线程中进行处理. 以下是四个案例片断: 实例一:
平均耗时视图: myAPM后台,会先统计卡慢链路的次数,计算链路中每个节点的平均耗时. 卡慢链路最后的两组数值含义:(代码调用行号),[方法平均耗时].耗时单位为ms. 明细视图: 在明细视图中,我们会列出所有卡慢实例,以及用户基础环境信息. 卡慢链路最后的两组数值含义:(代码调用行号),[方法耗时].耗时单位为ms. 实例二:
实例三:
实例四:
Process()方法消耗了1.3秒,setFacadeImage(),也另外消耗了1秒.
4、myAPM卡慢监控的优势
5、不足及方案myAPM,也存在不足.由于采用注入方式,会使apk的包,稍微变大. 以qzone android apk注入进行全量业务代码时,其apk大小增长0.5M,增长率为2.79%. 方案:
myAPM新特性app卡慢只是用于问题方法的性能优化.其实,对于一个产品,我们不但要关注及处理卡慢的问题,还需要关注app应用常规的性能状况与监控. 因为,这个性能波动,不会像卡慢那么明显.但是在一次次新版本迭代中,可以会让总体性能变慢. 1、监听app启动性能
2、核心链路分析无论是产品,开发,测试与运维,都会想知道:
我们可以继续将卡慢上报范围扩大,上报全量方法.通过数据分析及筛选,我们可以挖掘出核心链路及其性能数据; 3、延时加载通过链路特性分析,我们也可以抽取出调用次数很少,非主场景调用的代码.对于这些代码,在app启动加载时,我们可以使用延时加载.从而提升APP的启动效率. 续集说明
最后myAPM,是我们结合部门实际需求和APM理念,在移动端性能管理的一个新探索,新实践.不仅面向性能问题的定位,也应用于日常的app性能运营分析. 简单分享myAPM在移动性能管理方面的一点思考及应用,希望大家打造好自己移动端的性能小船,关键时刻,不会说翻就翻.共勉! 文:黄伟俊(henry) 原文出处:高效运维(greatops)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |