Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

40 | 衡量Flutter App线上质量,我们需要关注这三个指标

通过帧回调机制获取页面加载时长
在页面的初始化函数中记录时间
FPS=60*实际渲染的帧数/本来应该在这个时间内渲染完成的帧数
保留最近25个FrameTiming用于求和计算
在全局window对象上注册onReportTimings方法
单位时间内渲染的帧总数
60Hz为推荐数值
画面每秒传输帧数
通过NavigatorObservers属性监听页面的打开与关闭
页面切换状态需要通过Navigator感知
利用计数器进行累加统一记录异常发生次数
通过Zone与FlutterError捕获未处理异常
根据数据评估确定后续的优化方向
评估应用的健康程度和页面的渲染性能
准确定位及修复问题
及早发现问题隐患
页面加载时长
页面帧率
页面异常率
获取页面可见的时间
获取页面创建的时间
统计口径:页面可见的时间-页面创建的时间
页面从创建到可见的时间
FPS计算公式
帧回调机制
计算口径
FPS的定义
整体页面PV数统计
统计方法
统计口径:异常发生次数/整体页面PV数
页面渲染过程中出现异常的概率
页面的渲染需要依赖单个或多个网络接口数据时的页面加载时长统计方法
优化方向
数据的作用
3个数据指标统计方法
页面加载时长
页面帧率
页面异常率
思考题
总结
衡量Flutter应用线上质量的3个指标
文章主题

该思维导图由 AI 生成,仅供参考

你好,我是陈航。
在上一篇文章中,我与你分享了如何捕获 Flutter 应用的未处理异常。所谓异常,指的是 Dart 代码在运行时意外发生的错误事件。对于单一异常来说,我们可以使用 try-catch,或是 catchError 去处理;而如果我们想对异常进行集中的拦截治理,则需要使用 Zone,并结合 FlutterError 进行统一管理。异常一旦被抓取,我们就可以利用第三方数据上报服务(比如 Bugly),上报其上下文信息了。
这些线上异常的监控数据,对于开发者尽早发现线上隐患,确定问题根因至关重要。如果我们想进一步评估应用整体的稳定性的话,就需要把异常信息与页面的渲染关联起来。比如,页面渲染过程是否出现了异常,而导致功能不可用?
而对于以“丝般顺滑”著称的 Flutter 应用而言,页面渲染的性能同样需要我们重点关注。比如,界面渲染是否出现会掉帧卡顿现象,或者页面加载是否会出现性能问题导致耗时过长?这些问题,虽不至于让应用完全不能使用,但也很容易引起用户对应用质量的质疑,甚至是反感。
通过上面的分析,可以看到,衡量线上 Flutter 应用整体质量的指标,可以分为以下 3 类:
页面异常率;
页面帧率;
页面加载时长。
其中,页面异常率反应了页面的健康程度,页面帧率反应了视觉效果的顺滑程度,而页面加载时长则反应了整个渲染过程中点对点的延时情况。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何收集页面异常率、页面帧率和页面加载时长这三个指标,并强调了异常监控对于发现线上隐患和确定问题根因的重要性。页面异常率是页面渲染过程中出现异常的概率,页面帧率反映了视觉效果的顺滑程度,页面加载时长则反映了整个渲染过程中点对点的延时情况。作者提供了具体的代码示例,演示了异常发生次数和整体页面PV数的统计方法,以及页面异常率的计算方法。此外,文章还介绍了如何通过帧回调机制获取页面加载时长。通过本文,读者可以了解到如何采集这三项重要的质量指标,从而建立起Flutter应用的质量监控能力,及早发现线上隐患,提升用户体验。整体内容涵盖了Flutter应用性能监控的关键指标和相应的数据采集方式,为读者提供了实用的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • !_新起点
    如果页面渲染依赖单个或多个网络接口回调,那么我们需要减去用单个或者多个接口请求后,成功或者失败后的最后的回调里加载时间的时长。

    作者回复: 页面加载时长=页面本地渲染时长+网络加载时长

    2019-10-03
    2
    3
  • 和小胖
    老师,如果一个 App 只有一个继承 StatelessWidget 的页面,那么在不用原生配合的情况下如何得知页面退出了呢?NavigatorObserver 的 didPush 可以知道页面进入了,但是没有页面退出或者销毁的回调。

    作者回复: 如果你不是指的根widget退出,可以通过didPop回调;如果是根Widget的退出,那必须要通过原生配合了

    2019-10-30
  • 小米
    页面加载时长,一般超过多少毫秒算不正常呢?

    作者回复: 看具体业务了,一般TP90超过2秒就不正常

    2019-10-26
  • find
    当升级到Flutter 1.12.x 之后,onReportTimings应该改成SchedulerBinding的addTimingsCallback,SchedulerBinding.instance.addTimingsCallback(_onReportTimings);
    2021-04-07
    3
    4
  • (Jet)黄仲平
    老师好,在真实运用中这个帧率和界面异常率,是会设定一个阀值,当超出这个值的时候就上报。是吗?
    2022-01-11
    1
  • 小何
    return lastFrames.length/sum * 60; 这里写是写反了嘛 不应该是return sum * 60/lastFrames.length;嘛
    2021-07-22
    1
  • find
    那个帧率是怎么打印出来的,什么时机打印,上报呢
    2021-04-07
  • IF-Processing
    两个问题: 1. 下面这段怎么保留的原始回调,没看懂。。保留引用就能保留原始回调了吗?这个调用是链式的? void main() { runApp(MyApp()); //设置帧回调函数并保存原始帧回调函数 orginalCallback = window.onReportTimings; window.onReportTimings = onReportTimings;} 2.咱们统计出来这3个指标之后,通过什么手段上报呢?也使用类似bugly这种异常上报的机制吗?什么情况下使用,如何使用呢?
    2020-02-06
    1
  • Fun
    请问计算FPS的时候为什么要乘60
    2019-12-30
    1
  • 时光念你
    如果接口是when整合过的,取第二次的addPostFrameCallback时间作为Endtime。如果每个接口单独请求,取接口数量➕1的回调次数时间作为Endtime。
    2019-12-26
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部