App性能问题影响大,如何预防检查?带你了解U-APM

检测维修 0 116

背景

性能问题

一般状况下,App的性能方面的问题并不会径直致使其无法被使用,然而却会在潜在层面影响用户体验。在众多App呈现“内卷”态势的当下,一种不佳的体验甚至能够造成用户的流失。比如:

启动速度过慢

CPU占用率高导致的手机发热、耗电快

不明原因的闪退

…等等

预防和检查

当然,身为一名开发者,于编写代码之际,就得达成防止一些性能问题的浮现,诸如:

优化计算的复杂度从而减少CPU占用率

编写单元测试

...等等

当然,善于运用工具能够高效地对App的性能问题予以监控,助力开发者及时修复产品体验方面的缺陷。市面上APM工具数量众多,由于笔者曾于项目里运用U-App开展应用信息的统计,在此针对友盟U-APM来讲一些使用体验。

U-APM使用体检

集成

参照官方平台的集成说明,以iOS为例,这里做一个简述

在U-APM创建应用,生成一个Appkey

推荐使用CocoaPods来接入SDK

pod 'UMCommon'

pod 'UMDevice'

pod ‘UMAPM’

在 AppDelegate.m 文件中,添加如下

- (BOOL)application:(UIApplication *)application,didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {} ,其中application为UIApplication类型,launchOptions为NSDictionary类型,该方法返回BOOL类型 ,且此方法在APP启动时被用于进行一些初始化相关操作 。 ,在应用程序启动的时候 , 当应用程序已经加载完成并且准备好运行 , 这个方法会被调用 , 它会接收一个UIApplication类型的application参数 , 以及一个NSDictionary类型的launchOptions参数 , 使用这些参数来执行特定的操作 , 例如设置初始视图控制器 ,初始化数据模型, 或者执行其他必要的启动任务 , 并返回一个BOOL值来表示启动过程是否成功 。 ,启动完成后 , 应用程序会根据这个返回值来决定后续的操作流 。 。 。 。 。 。 。 。 ) , ( ( ( ( 以此来保证 , ,当应用程序启动时 , , ,会准确调用这个方法 , , , , 用于相应的初始化工作 , , , , 并且根据返回值来正确引导后续的流程 , , ,确保整个启动过程的顺利进行 ,无论遇到何种情况都能保证启动的逻辑性和连贯性 , , , , , , , , , , , , , , , , , , , , 从而使得应用程序能够正常启动并进入就绪状态 , , , , , , , , , , ) , , , , , BOOL 返回的值 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 在启动完成后 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 表示启动过程是否成功 , , , , , , , , , , , , , , , , , , , , , , , , , , , 正确判断 , , , , , , , , , , , , , , , , , , , , , , , 错误纠正都能通过此返回值来实现 , , , , , , , , , , , , , , , , , , , , , , , , , , 最终确保应用的正确启动 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 如何正确地启动 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 取决于这个返回值的判断结果 , , ,而这个返回值是由这个方法返回的 , , , , , 当应用向系统表明它已经成功启动并准备好运行时 , , , , , , , , 而这个方法会利用该返回值来引导应用程序的后续流程 , , , , ,NSDictionary类型的launchOptions参数用于传递启动相关的选项信息 , , , , ,UIApplication类型的application

通过使用以应用密钥为“61276660870a7a610a4f67f5”进行初始化,通道为空字符串 。

// Appkey在步骤1中生成

App性能问题解决方法_U-APM崩溃分析使用体验_网站性能检测工具

// 字段channel用于自定义渠道区分,若不填写,那么它将会被默认为是"App store",此时返回YES;

分析结果

1、崩溃分析

我只是于项目里的首页亲手写了一个能够主动引发闪退的 Bug,分析结果的图解如下:

处于崩溃状态的曲线图,对开发者而言,算得上是一种进行统筹的展示,关键在于,于页面下方的错误列表里,能够查看某一错误出现的次数,其类型,以及受到影响的用户数量,这极为便利,身为开发者,在修改Bug之际能够迅速且精准地判定优先级,此外,错误均具备单独的错误明细页,绝大多数的Bug均可实现精准定位。

-6350

-314325

后来,受到U - APM启动对崩溃进行分析所带来的启发,此启发是关于启动时对崩溃情况的分析,我在项目内部的启动方法,这个方法名为 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ,中,也就是在配置Appkey的前面以及配置Appkey的后面,但并不是同时就在一个地方填写全部内容,都各自分别写下了闪退Bug,并且暂时是用渠道名来做了彼此之间的区分。

结果显示,在配置AppKey前发生的闪退,并不能被捕获。

有人会问:那这不是必然的么?你都还没配置呢...

这恰恰是我要表达的问题,在诸多时候,我们配置第三方库,既然集成方法太过简易,往往肆意按官方教程增一行代码,却不探究其于项目代码里应处的最佳位置,因这不影响项目运行,此细节极易被忽视,我期许任何时候,开发者都应养成敲下每行代码前都试着思考的习惯。

2、卡顿分析

出现卡顿现象的列表以及明细,跟崩溃的情况相同,是能够进行查询以及定位的,而且还能够标记出(存在未处理、处于修复中、已被忽略、已完成修复)这4种状态 。

我额外增添了卡顿告警计划,一旦卡顿用户数占比超出5%,便会发邮件告知我,它于一小时内成功触发告警信息且在邮件里对我进行了提醒。

3、启动分析

我于启动之际,运用随机数来随机减缓这一项目的启动速度,默认首次启动也就是冷启动,超过3秒算作慢启动,热启动超过1秒为准,此处以冷启动作为示例:

在分析柱状图里也很好的展示了正常启动与慢启动的占比

4. 内存分析

在OOM的分析方面,好像对于Android的支持程度要比iOS更深一些。因为iOS存在Jetsam机制,所以在这里只针对当程序内存超过限制时所引发的一种特殊的Crash展开分析。并且其中包括异常的捕获,也并非全部都能够进行检测。

5. 分布分析

在以上四个模块,也就是崩溃、卡顿、慢启动、OOM异常的 分析当中, 平台都能够 有 相应开展,其包括设备进行分布、系统进行分布、运营商进行分布、版本运用到分布、页面进行分布、渠道进行分布、地域方面进行分布 。

5. 自定义配置模块

U - APM提供了采集开关,采集开关需要在代码中进行配置,配置要求是在初始化之前完成 。

以上就是我体验的U-APM的全部功能。

有着一些功能,是我尚未来得及去体验的,它们等待着更加多的开发者予以运用,像“云真机”,像“API上传符号表页面整体加载速度渲染”等等 。

相关推荐: