Skip to content

QMUIConsole 在展示大量 log 时性能较低 #1166

@fabcz

Description

@fabcz

Bug 表现
问题的具体描述
如题,最终定位到的原因是 UITextView 频繁设置超长文本导致 CPU 暴涨而卡顿

截图
Bug 现场的界面截图,或者 Xcode 控制台的错误信息截图,有问题的代码截图
注释掉 QMUIConsole 293 行 self.textView.attributedText = string; 就不卡了

如何重现

  1. 在 QDTableViewHeaderFooterViewController 的 scrollViewDidScroll 加一行打印,(为什么是这里?因为 demo 只有这里有实现 scrollViewDidScroll)
    [QMUIConsole log:@"文本长一点不用划得那么累"];
  2. 来回频繁滑动列表 10 秒以上(log 文本长一点不用划那么久),会发现列表开始有明显卡顿(FPS 开始低于 50),而且越来越卡(因为 logString 越来越长)
  3. 项目有个 FPS 文本监测到掉帧,简易集成代码如下
    QDTableViewHeaderFooterViewController.m.zip
    image

定位问题

  1. 经排查定位到导致掉帧的代码是 QMUIConsole 293 行 self.textView.attributedText = string;
  2. 经尝试多种设置方案均无改善,所以这算是 UITextView 设置超长文本性能问题?
  3. 将 TextView 替换成 TableView 就回归如丝般顺滑了,简易替换代码如下,并无处理 search、highlight 等状态
    QMUIConsoleViewController.m.zip
    image

预期的表现
正常情况下,应该是什么表现
看是否有更好的方式解决频繁 log 的问题

其他信息

  • 设备: [iPhone XR]
  • iOS 版本: [iOS 14.2]
  • Xcode 版本: [Xcode 12]
  • QMUI 版本: [4.2.1]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions