调试小工具-页面可交互时间监控(TTI)

背景

某周五临近下班时,领导的头像突然晃动了起来...


本文为曾经开发工具的介绍...仅作为自己的总结

  1. (本文)TTI 页面可交互时间监控
  2. Flutter FPS 监控(待填坑)
  3. 颜色标尺(待填坑)
  4. 组件抓手(待填坑)
  5. 录屏分析
  6. 调试工具重构(待填坑)

TTI指标介绍

页面可交互时间是衡量用户体验的重要指标之一,一个页面打开速度越快,用户等待越少体验越好,业务流程进展也就越快。对 TTI 进行准确有效的监控可作为性能分析重要的指标之一。


页面打开时间

方案确定

调研的同事在 Android 和 Flutter 侧均采用的是渲染比例的方法,当页面渲染达到一定比例时即判定页面可交互。笔者询问道:

  1. 页面push到完全铺满整个页面,页面渲染达标的判断依据是什么?
  2. 对于类似某些页面存在部分信息骨架屏的场景,如何兼容?

得到的回答是“取左上角和右下角存在填充数据的组件所构成的矩形占屏幕的比例”
进一步追问道:“如果页面数据展示很少呢?或者就这两个组件有值呢?或者存在带数据的骨架屏呢?或者....”
同事以“已开发完成”为由拒绝继续沟通 :)
显然,这套方案缺陷非常明显...并不适合......

问题分析

将指标特点拆分来看
a. 主流程接口已请求完成,骨架屏已消失
b. 页面已填充信息的组件达到一定比例
c. 存在特殊页面需要单独处理

方案选择

在确定采用填充率之前,需要考虑三个主要的问题及其应对草案:

Q1: 页面交互判断标准如何界定?
A1: 页面出现到可交互状态,页面变化最大的就是页面信息的填充占比。以页面初次展示为始,信息展示模块填充信息是否超过阈值为最终的判断标准

Q2: 如何兼顾方案的可实施性、运行性能?
A2: 依赖页面生命周期判定起始时间,TTI的监听状态来控制整个监听周期,同时通过控制样本数量&类型&阈值配置&超时时间以达到性能的可控

Q3: 如何确保功能的独立性,保障未来的扩展性
A3: 利用协议约束单个指标监听方案的接入规范

贴一下在调研各方案时的对比:

方案名 方案描述 侵入性 性能 通用性 订制化 结论
打点 通过业务打点上传 ❌ 仅适用于业务分析
截图 通过直方图分析截屏判断是否一致 ❌ 仅适用Debug模式
渲染比例 坚挺页面控件软件面积比例 ❌ 不适用iOS,边界场景覆盖复杂
填充率 监听页面信息类组件的填充比例 ✅ 适用

整体结构

TTI监控流程

主要功能点

监控的周期

  1. 通过切面编程实现生命周期的HOOK,以viewDidLoad为开始时间,达到可交互状态为终止时间,两者之差就是 TTI
  2. 当监控到页面可操作时监控结束,可主动结束(例如超时)
页面打开生命周期

从图中可以看出,页面打开时常还可精细化为“启动时间”“页面初始化时间”“首次渲染耗时”“二次渲染耗时”。而在实际的业务场景中, 页面init并不一定代表页面即将展示,系统启动页面的时间几乎可以忽略不计。

CADisplayLink

相对于 GCD Timer 而言更切合屏幕刷新的特点,避免过于频繁的循环。

广度优先搜索BFS

兼顾视图树的特点, 利用广度优先搜索的特点可以尽可能大的覆盖页面区域。当然,在BFS的基础上需要对TTI判定的提点进行微调(见样本取样介绍)

样本取样

结合BFS的尽可能大的覆盖页面区域的特点,仅需要取少量样本,例如采样前50个有效组件即可判断页面是否已达可交互状态。对于有效组件的定义,可指定两个特点:

1. 尽可能的靠近视图树结构的末端

页面的结构本质上可理解为一颗视图树,视图树中不仅包含了信息类的组件,还包含很多容器类的组件, 例如View、tableView、scrollView等等。这类容器类组件在 BFS 的搜索过程中可直接跳过,直接遍历其子节点。

页面视图树
2.可展示信息的组件

信息组件的样本取样可以过滤为最常见的信息组件,Label,ImageView,TextView,UIButton等, 下图为抓取样本中已填入信息的组件的示意图:

已填充数据组件的示意图

判空策略

判定信息类的组件是否有显示内容,例如Label的text,ImageView的image

填充率阈值

当样本中的填充的组件数量超过阈值时即可表示达成了可交互状态,笔者的预设的缺省值为50%。少数特殊页面可通过页面阈值配置予以兼容。页面阈值的可配置化可使用后端配置下发,也可在前端对页面组件添加阈值属性(具体添加方式依项目情况而定,属性、协议都可行)

可配置化使得监控的标准可订制化,是TTI监控策略中比较重要的特性。

其他难点及解决方案

Q1: 同一指标不同监控方案侧重点不同如何兼顾?
A1: 简化外部调用,统一规范,通过配置来控制具体监控方案的调用


Q2: 如何降低监控本身带来的性能损耗
A2: 优化具体方案,明确监控的边界,加入AB开关容灾机制

Q3: 如何形成对应用的整体打开速度分析
A3: APP 内采集的数据,需要将数据上传至后端进行整合后按照时间输出打开速度的走势图

结语

打开时间包含了接口请求所消耗的时间,起到了前端对接口抖动的监控覆盖,同时也可用于“白屏监控”。开发过程中尽可能避免对业务的侵入,在监控TTI指标的过程中控制好阈值的配置,有效样本数量就可以在不影响性能的前提下获取到比较精准的时间。

后续更新

前段时间主流程最后一个页面也全部实现了预加载和骨架数据, 这就使得我们曾经去监控数据的填充一类的方式全部都失效了, 最终,这类初始状态就带有几乎全部数据填充的页面都改为使用纯业务打点的方式, 最准确,性能消耗也最小。这并不否定之前我们非侵入式的监控,这类页面仅占总数的很少部分,而业务打点也是当前最适合的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容