大多数浏览器和
Developer App 均支持流媒体播放。
-
利用 Xcode 和设备端检测对卡顿进行跟踪
学习如何提高响应速度、消除 App 中的卡顿并优化体验。和 Performance Tools 团队一起,跟着我们探索如何跟踪这些问题,甚至在它们发生前防患于未然。我们将带您了解 iOS 的最新检测机制,帮助对预发布测试期间的卡顿进行跟踪,并说明如何利用 Xcode Organizer 识别发布版本中的问题等等。
资源
相关视频
WWDC23
WWDC22
WWDC21
WWDC20
-
下载
♪ 柔和乐器演奏的嘻哈音乐 ♪ ♪ 大家好 我是 John Crowson 我是 Apple 性能工具团队的 软件工程师 在本次讲座中 我将向您介绍几个新工具 它们可以用 Xcode 和设备上的卡顿检测 来跟踪 App 中的卡顿 我将作为您的向导 带领您参观 App 开发过程的不同阶段 并考虑在每个阶段 最适合提供帮助的工具是什么 本次讲座分为四个部分 首先 我将介绍 什么是卡顿 然后 我将介绍一些工具 帮助您在 开发 App 测试 App 时以及发布 App 后 发现和诊断卡顿 让我们现在开始吧 我想分享我团队 正在开发的一个新 App “食品车”它将有助于管理 专门销售甜甜圈的食品车 来看看我创建的甜甜圈类型
滚动浏览我的甜甜圈列表 确实要花不少时间 该 App 运行缓慢 没有响应我的任何触碰 在 Apple 我们将这段 无响应的时间称为“卡顿” App 的主线程负责处理 用户交互和更新视图内容 当主线程忙于工作 或等待另一个线程或系统资源 导致更新视图内容 至少延迟 250 毫秒时 会报告卡顿 在卡顿解决之前 主线程也无法处理新的用户交互 在用户看来 App 看上去完全卡死了 创建响应灵敏的 App 对于提高用户体验至关重要 持续无响应的 App 可能会导致用户 强制退出 App 切换到其他 App 在某些情况下 甚至删除您的 App 并写负面评价 因此 跟踪您的 App 中的卡顿 对于积累和维护您的用户群体 至关重要 提供即时响应的体验可让用户 会更愿意使用您的 App
有关卡顿及其原因的更多信息 以及从代码中消除它们的方法 请查看 WWDC 2021 “理解和消除 App 中的卡顿” App 的开发过程 可以分为三个阶段 首先 使用 Xcode 在桌面上 开发最新的 App 版本 然后 在没有 Xcode 的 测试环境中 测试 App 并收集反馈 例如 您可能有一个 App 版本 是在您的设备上开发的 或是通过 TestFlight 分发的 最后 在 App Store 上 发布最新的 App 版本 即使对于最积极主动的开发者 新的卡顿问题也可能 会出现在任何情况下 所以知道在各个阶段 帮助定位卡顿的工具 是非常重要的 在 iOS 16 和 Xcode 14 之前 我们提供了两种帮助发现和诊断 App 中卡顿的工具 MetricKit 是一个支持收集卡顿率指标 和反馈诊断报告的框架 可用于您的 Beta 版 或公开发布的 App Xcode Organizer 会收集用户在使用 您公开发布的 App 时 产生的卡顿率数据 这里存在一些差距 特别是在开发 App 或试图理解 什么源代码 导致公开发布卡顿率指标上升时 在 iOS 16 和 Xcode 14 中 我们致力于引入新工具来提供帮助 在我们更详细介绍这些工具之前 让我先简要地概述一下 在调试 App 时 Xcode 中的线程性能检查器 会在没有主动跟踪的情况下 提醒您引起线程卡顿的问题 Xcode 中的 Instruments 在跟踪您的 App 时可以检测并标注卡顿 设备上的卡顿检测 可以提供卡顿检测 而无需 Xcode 和跟踪 提供实时卡顿通知 并在使用您开发签名或 TestFlight App 时 支持诊断 最后 Xcode 中的 Organizer 现在支持卡顿报告 它将提供 用户在实际使用中汇总的卡顿率数据 现在您知道什么是卡顿 以及它们可能出现的不同阶段 接下来我将介绍在使用 Xcode 开发 App 时如何追踪卡顿 在 Xcode 14 中 当新的线程性能检查工具检测到 您的 App 主线程中存在 优先级反转和非 UI 工作时 它会在 Xcode 问题导航器中 通知您 这两种情况都是导致卡顿的常见原因 我现在已经回到 Xcode 来诊断我之前滚动浏览甜甜圈列表时 发现的食品车 App 卡顿问题 当我构建并运行 App 并重复用户交互时 线程性能检查器工具提醒我 由优先级反转引起的卡顿风险 这意味着更高优先级的线程正在尝试 与较低优先级的线程同步 这可能表明我们注意到的卡顿 是由主线程 在等待不同的低优先级线程引起的 为了检测您的 App 主线程上的 优先级反转和非 UI 工作 从相应 scheme 的 Diagnostics 部分 启用Thread Performance Checker 工具 线程性能检查器警报能帮助我发现 卡顿潜在的罪魁祸首 但为了进一步分析 我想知道 在卡顿期间另一个线程在做什么 让我们使用另一个工具 进行更深入的研究 Time Profiler 工具 通过提供调用堆栈 让您能够知道 App 中的 每个线程在一段时间内做了什么 Xcode 14 中提供了新功能 Time Profiler 还可以检测卡顿 并直接在相应的流程轨迹中进行标注 在食品车 App 中 我将使用 Time Profiler 来确认在滚动浏览甜甜圈列表时 发生卡顿 卡顿是由于 主线程上的优先级反转引起的 我也将找出低优先级线程 正在忙于做什么导致主线程等待 打开 Xcode 中的 Product > Profile 这将构建发行版的 App 并启动为目标 App 配置 好的 Instruments 我启动 Time Profiler 模板 并开始记录食品车 App 中 有问题的用户交互
我看到这里检测到卡顿 并在时间轴上标注 卡顿持续时间也会标出 来帮助评估问题的严重性 接下来 我可以三击卡顿间隔 为卡顿的持续时间创建时间过滤器 并将底部的详细视图中的信息筛选为 仅在选定的时间间隔内 发生的事件 它还可以更轻松地查看 在此期间其他轨道正在发生的事情 我首先注意到的是主线程 在卡顿间隔期 几乎没有任何 CPU 使用率 这表示主线程没有响应 因为它正在等待另一个线程 而不是因为它本身工作过载 这与之前线程性能检查器的 优先级反转警报反馈一致 然后 我看到一个在卡顿期间 有很多 CPU 使用率的工作线程 这可能就是主线程正在等待的线程 下一步将是检查 工作线程在卡顿期间在做什么 并解决优先级反转问题 Instruments 中的 卡顿检测和标记 以很好的方法显示出 在分析 App 时遇到的任何卡顿 它在 Time Profiler 和 CPU Profiler 中默认可用 还有一个新的独立卡顿跟踪工具 您可以将其添加到任何跟踪文件中 以便与其他工具结合检测卡顿 除了卡顿检测和标记 它还让您配置卡顿持续时间阈值 找出特定的无响应时期 您现在已经学会了 如何使用 Xcode 来发现和诊断卡顿 即使在开发过程中有很好的测试覆盖 Beta 版和 公开发布环境也很可能 发现您忽略了的 代码路径中的卡顿 接下来 我将介绍 一旦 App 部署在 Beta 环境中 该如何跟踪卡顿 我现在已通过 App Store Connect 将食品车 App 的内部版本 部署至 TestFlight 也将它下载至我的个人设备上 我会在城镇售卖甜甜圈时 测试这个 App 包括在网络连接较弱 的地方测试 但如果我的设备 没有连接到 Xcode 我该如何发现和诊断卡顿呢 要在这些情况下继续监视卡顿 iOS 16 在开发者设置中 引入了设备内卡顿检测 提供实时卡顿通知 以及支持诊断 这可用于开发签名 或 TestFlight App 是时候开始销售了 当我尝试打开当前订单时 我收到设备上卡顿检测通知 这表示我的 App 卡顿了 这次卡顿持续了三秒多 我想知道 在我使用 Xcode 进行开发时 为什么我没有注意到这个卡顿 于是我将需要使用 设备上卡顿检测工具提供的诊断信息 以了解更多 只要你的 App 是为开发而设置的 该功能可以通过打开 设置 > 开发者 > 卡顿检测 并切换开关来启用 卡顿阈值可设置 要检测的卡顿的最短持续时间 最短卡顿阈值为 250 毫秒 并且可提高到 500 毫秒或更高 长时间卡顿往往会对用户 产生更大的影响 但即便是更短时间的卡顿 也可能会破坏用户使用体验 这取决于上下文 特别是当它们连续发生时 安装您的 App 后 它将出现在监控 App 列表 最后一部分为您已收到警告的 按时间顺序排列的卡顿列表 请注意 这些诊断是尽力而为的 并在后台以低优先级处理 以最小化性能开销 这意味着处理可能需要更长的时间 特别是在系统繁忙的情况下 幸运的是 当新的诊断可用时 被动通知会被显示 让我们来查看一下 当我在镇上卖甜甜圈时 在 App 中打开订单 检测到的卡顿诊断 我得到了基于文本的卡顿日志 和用于检测卡顿的 tailspin 基于文本的卡顿日志信息较少 但可以让我们一眼 就了解到卡顿 要进行更深入的研究 打开 Instruments 中的 tailspin 查看进程中的线程交互 或识别系统资源的使用情况 之类的内容 首先 我将使用“分享”按钮 将基于文本的卡顿日志 发送到 Mac 以便我符号化和在更大的屏幕上查看 从查看我转移和标记的 基于文本的卡顿日志摘录 可以看到在卡顿期间 我在主线程上调用一个方法 我知道该方法执行对网络的同步请求 当我在桌面上和 网络连接良好的环境下 使用 Xcode 测试 App 时 从网络请求数据 可能不会有任何延迟 但是 在某些网络连接受限的地方 测试 App 时 该请求需要更长的时间并会导致卡顿 在这些不同的真实条件下 测试 App 的 Beta 版很重要 且设备上卡顿检测仅允许 您使用自己的设备来监控卡顿 至此 我已经使用开发和测试阶段 可用的工具来发现并诊断出卡顿 我已准备将食品车 App 上线至 App Store 我现在将介绍当您的 App 上线后 该如何跟踪卡顿 在不同的操作系统版本 设备和其他现实环境中 您可能无法在之前的测试中复现 Xcode 14 中的新功能 Xcode Organizer 能够从用户设备收集卡顿数据 并展示卡顿报告和诊断 收集的数据来自已同意 共享 App 分析的用户设备 数据包含导致卡顿的 主线程堆栈跟踪信息 可在 Xcode Organizer 的左侧导航器中查看卡顿报告 当收集到类似的堆栈跟踪时 将它们组合在一起形成单个签名 在列表中 签名是根据用户影响排序的 对于每个签名 您可以找到一些示例卡顿日志 每个卡顿日志都包含主线程堆栈跟踪 其中包含导致卡顿的代码 卡顿持续时间 以及生成日志的设备和操作系统版本 每个签名还提供关于签名 相关的卡顿日志数量的 汇总统计信息 并按操作系统版本和设备 细分这些日志 要确定对您的用户影响最大的卡顿 请密切留意您的排名靠前的签名 在本例中 顶部签名 占用该版本中 21% 的卡顿时间 由于我已向 App Store 提交了带有符号信息的 App 卡顿报告显示了所有函数的名称 就像它们在源代码中一样 通过检查 这个主线程调用堆栈中的函数 我可以推断这个卡顿 是由于在主线程上 从磁盘同步读取文件引起的 我们知道这会阻塞主线程很长时间 解决对用户影响最大的性能问题 至关重要 Organizer 是定位这种问题的好工具 在每个 App 发布后 检查这些数据 以确认之前的卡顿问题已被解决 并处理可能出现的新卡顿问题
您还可以通过 App Store Connect REST API 检索相同的卡顿报告数据 这可以帮助您将性能数据 与您自己的系统集成 或运行其他分析 我强烈建议您查看 “Identify trends with the Power and Performance API” 讲座 了解更多有关使用 Power and Performance API 的信息 从 Xcode 13.2 起 当您在 App 中监控功耗 和性能指标时 可接收通知 建议从 Xcode Organizer 的 Regression 视图 点击右上角的通知按钮启用通知 这将提醒您注意 App 卡顿率的突然上升 可在 2021 年的 “诊断 App 中的功耗 和性能回归”讲座 了解更多信息 为了改善您的 Xcode Organizer 使用体验 我强烈建议您构建并提交 App 到 App Store 时包含符号信息 此符号信息用于将 App 中的 函数名添加到 Xcode Organizer 的报告中 这大大方便了 理解堆栈跟踪 它还支持从堆栈跟踪中的函数名 到 Xcode 源代码编辑器中 函数定义的一键式导航 提取的信息 仅限于函数和方法 源代码文件的名称和路径 以及行号信息 需要注意的是 有限的符号信息 将被安全存储并且永远不会被共享 很好 您现在知道在开发过程的每个阶段 如何发现和诊断卡顿 运行 发现 诊断 在开发过程的最早阶段 发现并修复卡顿 使用可用的工具提供帮助 包括使用 Instruments 主动分析新功能 确保启用线程性能检查器 和设备上卡顿检测 在每个版本发布后 使用 Xcode Organizer 来解决最影响用户的卡顿问题 并验证之前 App 版本的 卡顿问题是否已经解决 启用退化通知 主动提醒性能指标的退化 这可能是耗电和 性能问题的第一个迹象 最后 构建带有符号信息的 App 并提交至 App Store 以提高 Xcode Organizer 的实用性 按照这些步骤 您的 App 将会有更好的性能 提供最佳的用户体验 感谢您参加 WWDC ♪
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。