96SEO 2026-02-20 02:11 14
中计算显示内容比如视图的创建、布局计算、图片解码、文本绘制等。

随后
没有完成内容提交则那一帧就会被丢弃等待下一次机会再显示而这时显示屏会保留之前的内容不变。
这就是界面卡顿的原因。
不论哪个阻碍了显示流程都会造成掉帧现象。
所以开发时也需要分别对
碰到问题录制完了无数据用iphone7录制有数据的iphne14录制无数据iphone7检测结果发现掉帧确实很频繁
cell上的lottie动画组件没有复用cell上有大量的removeFromSuperView导致列表滑动过程中频繁的视图添加和删除同时本来只需要更新显示内容的控件也没有得到复用
商品图片和店铺头像确实有进一步裁减压缩的空间滑动过程中停止lottie动画渐变图层换成图片
主线程耗时任务比如调用UIGraphicsGetCurrentContext等接口在
无主线程等待繁忙的子线程或低优先级的后台线程任务而导致阻塞或者在滑动过程中主线程有耗时方法
往下滑动加载下一页数据时确实有耗时的操作放在主线程主线程等待系统资源比如使用Data(contentsOf:)进行
内存占用过度列表一直往下刷新内存会爆掉可能存在内存泄漏需要进一步看看
可以用内存工具检测看看有没有异常看代码里有没有循环引用等引起内存问题的代码缓存是否不合理
优化代码结构避免在刷新数据的时候添加和删除界面元素优化左上角lottie动画的加载方式避免每次刷新数据都更新Lottie动画达到复用的目的
双列Cell底部组件反复的添加和删除逻辑优化解决离屏渲染问题商品图片和介绍图预加载并裁减来减少体积图片从100200Byte减少到几个Byte解决滑动过程中停止播放器定时器生效导致播放器一直在播放引起的掉帧渐变背景图层换成图片加载下一页数据代码中主线程耗时方法尽量放到非主线程的异步线程滑动过程中停止lottie动画优化获取size的逻辑内部控件固定的size计算好后缓存下来减少frame的设置刷新播放器代码从UI组件抽取出来解决一个历史遗留bug显示封面图时增加渐显动画
cell是复用的已经添加在cell的控件如果刷新数据时需要隐藏的使用hidden而不是重复remove/add这样修改测试重点要看下会不会因为cell的复用导致数据显示没有更新过来lottie的url获取和创建优化url是从config
server获取的之前是每次刷新数据都获取改成创建控件的时候获取一次创建之前也是每次刷新数据的收获都重新创建改成只创建一次
解决离屏渲染问题商品图片和介绍图预加载并裁减来减少体积图片从100200Byte减少到几个Byte解决滑动过程中停止播放器定时器生效导致播放器一直在播放引起的掉帧这是个程序Bug是造成滑动列表过程中掉帧很重要很隐蔽也是个很干扰排查的原因渐变背景图层换成图片排查加载下一页数据代码中主线程耗时方法尽量放到非主线程的异步线程滑动过程中停止lottie动画优化获取size的逻辑内部控件固定的size计算好后缓存下来减少frame的设置刷新
改善前无论是下拉加载数据还是数据加载完毕往上滑动列表都有明显掉帧和卡顿现象
分析可能的原因是往下滑动加载下一页数据时接口数据回调回来后调用框架的CSCollectionViewDataManager类的addCardInstances方法在主线程耗时27ms左右导致掉帧。
因为引起掉帧的因素是多方面的一开始无从查起可以先把最明显的一些优化点先改好再慢慢用排除法去定位哪些模块引起问题的从而再进一步针对的排查重构完一个单元进行一次自测从明显的关键问题入手分析改造采用排除法排除有问题的地方能快速定位问题但是要注意排除干扰因素比如排除抓包干扰抓包的时候界面会变的更加卡顿掉帧所以记得关掉antbox或者删除掉抓包相关的依赖库
排查过程中确保单一场景。
比如列表往下滑和往上滑其实是不同的场景往下拉时会触发加载更多数据等一系列的动作应该分别去分析两个场景下引起掉帧的原因。
感觉往下加载新数据时卡顿更严重一些等分析加载新数据卡顿原因时再进一步分析
得出结论同时只显示一张图片时往回拉基本不掉帧。
增加一张图片往回拉出现掉帧。
方法从日志台打印的关键日志入手找到往回拉和往下拉日志差别找到了didTriggerPaging方法从这个方法入手终于揪出了两个主线程耗时方法
记得看下预览的cell是否有离屏渲染问题预加载图片两次调查一下原因打了两次log加载出错时重新加载逻辑貌似现在没有启播加速放到异步线程—
发现不影响reloadWithThemeConfigVO应该没有必要每加载一次都去拉取可以优化addCardInstances耗时是否真的影响列表渲染播放器的播放会掉帧注释掉播放器完全不掉帧
播放器没有停止播放会引起掉帧往下加载数据注释掉预加载图片的代码还是会掉帧说明预加载图片不是引起掉帧的原因MLPLiveRecommendView里也有个image但是这样的数据很少没必要放到预加载图片
cell上的lottie动画组件没有复用cell上有大量的removeFromSuperView可能导致卡顿代码可以优化是为了避免数据重复在prepareForReuse里使用可以换成在这里刷新数据圆角设置的方式导致离屏渲染
滑动结束一堆的cell调用了stopfeeds接口请求参数exclContentIds随着分页数增加数组越来越大是必要传的吗一直刷新内存爆掉闪退可能不是这个模块的问题
1、preview类型数据没有自测过记得mock数据自测2、有recommend的数据也没自测过3、为了本地跑真机在工程文件里去掉了一个purchase的勾选并提交了4、开关mock数据测试一下开关是否生效5、测试一下开关是在什么场景下生效每次进入直播广场6、偶现刷着刷着闪退
同一父视图重复调用addSubviews添加同一个View并不会产生多层级测试性能时不要链接抓包工具可删除APMockData库减少干扰最好断开debug链接三板斧可监控日志、埋点、可灰度发布阶段、可回滚开关控制mPaas框架ARC下block不需要copy因为属性是strong系统会将block自动拷贝到堆区就不会有block捕获的变量值不确定的问题了alpha属性
1、UIView当有背景颜色时并且背景颜色有透明度(透明度不为1时),将
2、UIVIew有背景颜色时并且背景颜色的透明度为1opaque的值不影
卡顿检测工具使用测试代码熟悉过程Cell模版注入原理多亏师兄的指点缩短了理解时间每修改完一个组件需要花大量时间mock数据模拟各种场景和参数自测采用排除法测试是哪个组件导致卡顿时注册掉一个加载图片的组件发现流畅很多但是分析代码不知道什么原因导致卡顿然后一顿排除测试
怀疑是imageview的背景色设置MLP_C_FFFFFF_NODARK导致的
但是最后发现断开antbox连接后卡顿好很多可删除APMockData库减少干扰编译瓶颈
Xcode调试成为瓶颈(模拟器看离屏渲染有时跑不起来;修改一次代码编译要好几分钟)发现注释代码后编译时间变长取消注释的代码编译时间也很长什么代码也没改重新编译时间也很长看来编译时间可能跟网络环境有关同样的电脑同样的工程不一样的网络环境
UICollectionView复用UICollectionView缓存机制探究
dispatch_sync_on_main_queue如何安全使用dispatch_sync
深入理解列表卡顿原理和滑动优化方案_苹果手机上的列表滑动问题-CSDN博客
图片的渲染过程与优化非常有用iosiOS图片的渲染过程与性能优化
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback