带你读《2022技术人的百宝黑皮书》——APM 页面加载耗时校准(7)https://developer.aliyun.com/article/1340937?groupCode=taobaotech
挑战:多容器内嵌页面
在手淘中有各种各样的跨端容器框架,如 weex 等。存在一个页面上多种容器并存的情况,容器与容器之间,数据如何兼容,APM 提出了自身的仲裁方案。
在店铺一个页面中,有可能存在多种框架混合使用的情况,举个例子,可以用 WebView 实现一个广告推荐,可以用 Weex 渲染出整个页面。
如果每一个容器直接将自己的页面加载时间点通过一个接口直接打进来,APM 选取哪一个作为页面真正的加载结束时间戳呢?如果选取最小的时间戳,如果对应的 View 不是页面主要元素,那么这个值比体感加载时长小,如果选取最大的时间戳,就有可能偏慢。
其实在 Native 角度,每一个容器只是 View 树上的一个节点,APM 只需要关心这个子 View 是否加载完成,然后使用页面加载算法计算(8060算法),就可以知道整个页面是否加载完成。
那么问题就简化成如何知道这个子 View 是否加载完成。当前 APM 支持对 View 打标,当 View 没有加载完成的时候,就会打上没有加载完成的 tag,完成页面加载就会打上完成的 tag。由于容器知道自己的加载状态,就只需要在合适的时候,给自己的 View 打上合法的 tag 即可。
由于 APM 在遍历 View 树的时候,一旦发现 View 打上了 tag,就不再往下遍历,直接确定了当前 View 的状态, 起到了数据仲裁的效果。
写在最后
对于 APM 页面加载耗时校准而言,目前 APM 还只是向前走了一小步。在最新的 APM 自动化页面加载耗时计算中,剔除了对用户页面加载体验无效的元素,聚焦页面加载体验中的核心元素,既给了业务相对的自由度,又达到了一定的加载体感准确性。
团队介绍
淘宝Android体验技术团队,以打造极致的移动用户体验为愿景,立志于研发体验相关技术、中间件,以及提供产品化解决方案,一站式为淘宝及其他移动应用核心场景体验赋能。团队在应用级优化有丰富的经验,并深耕于系统级能力,目前已有多个成熟技术方案服务于大促会场,应用启动,外链拉端等,已建立全链路的线上性能监控体系,探索非确定性性能问题的监控及排查能力,我们长期招聘志同道合的伙伴,欢迎有志人士加入。