iOS 列表掉帧调查方法以及解决方案

直播广场卡顿测试

单元模块排除法找出引起掉帧的主要因素

场景:
1、往下拉
2、往上(回)拉

前提:注释播放器play和stop逻辑;注释起播加速;

1、注释topview所有组件,只留下bottomview
测试滑动效果:
往下滑动时,仍然会掉帧
网上滑动,不掉帧

结论:
1、可能商品图片加载引起掉帧
2、加载新数据引起掉帧

进一步测试:注释商品图片加载代码
测试滑动效果:
往下滑动加载新数据,还是会有些许掉帧 —— 加载新数据有可能存在阻塞主线程的方法
往上滑动不掉帧

2、 放出_introView(图片和渐变背景先隐藏)
测试滑动效果:
往下滑动,加载新数据有些掉帧;
往上滑动,基本不掉帧;再次往下滑动,也基本不掉帧了;

3、 放出tagview(lottie先隐藏)
测试滑动效果:同上

4、 放出tagview的lottie
说明:
1、 lottie的url从config server取的,初始化控件的时候取一次
2、 lottie的创建(调用框架的方法,异步获取, 并开启了缓存(降级场景只能取到静态图?))
测试滑动效果:同上

5、 放出_introView的渐变背景
测试滑动效果:同上

6、 释放封面图预加载代码
测试滑动效果:同上; 感觉往下加载新数据时,卡顿更严重一些,等分析加载新数据卡顿原因时再进一步分析;

7、 释放goodsview图片
测试滑动效果:同上;

8、 释放_introView图片加载
测试滑动效果:
往下加载新数据会掉帧;
往上滑动也出现了偶尔掉帧;

9、重新隐藏_introView图片加载再测试一遍
测试滑动效果:往回拉时基本不掉帧。
得出结论:同时只显示一张图片时,往回拉基本不掉帧。增加一张图片往回拉出现掉帧。

10、只加载封面图,隐藏其他图片加载
测试滑动效果:同2

11、释放_introView图片加载
测试滑动效果:掉帧不明显

12、释放goodsview图片加载
测试滑动效果:往回掉帧

13、goods和intro的图片都预加载
Goods预加载前224b -> 预加载 14b
Intro预加载前104b -> 预加载 8b
问题:预加载两次,调查一下原因

接下来,逐步分析加载新数据掉帧原因
方法:从日志台打印的关键日志入手,找到往回拉和往下拉日志差别;找到了didTriggerPaging方法;从这个方法入手终于揪出了两个主线程耗时方法
1、addCardInstances 耗时20多ms
2、preHandleCardInstances 平均耗时4~6ms

记得看下预览的cell是否有离屏渲染问题

你可能感兴趣的:(iOS原创,ios,UI掉帧)