View in English

  • 打开菜单 关闭菜单
  • Apple Developer
搜索
关闭搜索
  • Apple Developer
  • 新闻
  • 探索
  • 设计
  • 开发
  • 分发
  • 支持
  • 账户
在“”范围内搜索。

快捷链接

5 快捷链接

视频

打开菜单 关闭菜单
  • 专题
  • 相关主题
  • 所有视频
  • 关于

更多视频

  • 简介
  • 概要
  • 转写文稿
  • 分析并优化 App 的功耗

    了解如何优化你的 App,以充分延长电池续航时间。探索如何查明 App 功耗问题的根本原因,无论是在连接到 Xcode 时还是出行期间遇到这类问题,都可以查明。了解如何测量功耗,以便你可以就新功能做出更明智的决策,并主动构建更高效的 App。

    章节

    • 0:00 - 开场介绍
    • 1:52 - 调试易于重现的问题
    • 9:37 - 查明根本原因
    • 16:19 - 比较功耗
    • 18:25 - 主动优化

    资源

    • Measuring your app’s power use with Power Profiler
    • Performance and metrics
      • 高清视频
      • 标清视频

    相关视频

    WWDC25

    • 通过 Instruments 优化 CPU 性能
  • 搜索此视频…

    大家好 我是 Wiam 是 Apple 的软件工程师 很高兴能和大家探讨功耗优化

    你致力于提供 出色的高质量 App 体验 人们希望 App 可以全天无间断使用 而这种可靠性的一大关键 在于出色的电池续航 节能的 App 可以更长时间地 吸引用户 提升满意度 真正的两全其美 而功耗过大的 App 即使体验上佳 也持续不了多久 那么 你是否想要一种秘密武器 让你能够构建既强大 又节能的 App? 在本视频中 你将学到一些新方法 利用这个工具的功能 解决功耗问题 在深入探讨之前 我将快速大概介绍一下今天的内容 我会首先解决那些你在办公桌上 就可以轻松重现的问题 我将通过一个真实的例子 展示如何识别和减轻 功耗过大的问题

    然后 我将探讨如何应对那些 更具挑战性的真实场景 这些问题更难发现 我将展示如何在 各类环境中收集数据

    接下来我将演示如何比较 不同实现的功耗 这种方法可以清楚地 衡量和提高 App 的能效

    最后 我将介绍如何 在开发过程中及早 主动检测功耗问题 以便得到高度优化的 App 版本

    或许你已经在 Xcode 中注意到有 高能耗情况 这表明存在问题 但找到根本原因却很难 在这种情况下 你真正需要的是 能够运行 App 重现问题并记录能耗指标

    Instruments 中的 Power Profiler 是实现这一目标的理想工具 通过它 你可以剖析 App 并跟踪记录功耗数据 然后在 Instruments 中直观展示 正好 我在我的 App 中 也想解决这类问题 我正在开发一款流媒体视频播放 App Destination Video 专为在 iPhone 和 iPad 上 观看内容而设计 我想改进一下 因此我添加了一个“媒体库”面板 以便轻松浏览整个视频集 事后我查看 Xcode Organizer 的 能耗报告时 我发现与以前相比 CPU 使用率上升明显 这直接导致性能下降 电池续航时间缩短 我将使用 Instruments 中的 Power Profiler 来调查这个问题 首先打开 XCode 项目 然后无线连接我的 iPhone 接着前往“产品” 并点按“个人资料” 这将构建 App、将它安装到 我的设备并打开 Instruments 选择空白模板 然后选择 Power Profiler 以及 CPU Profiler 以便同时收集 有关 CPU 使用情况的信息 你还可以根据需要 选择其他工具 我将使用默认设置开始记录

    现在我将切换到设备 并打开“媒体库”面板

    我还注意到 打开这个面板时 卡顿了一会儿 可能与我正在调查的问题有关 现在我将停止记录并检查数据 按下 Command + Control + Z 键 可以聚焦在记录上 我将点按数据跟踪左侧的显示三角形 展开 Power Profiler 跟踪 借助 Power Profiler 我不仅可以 了解整个系统的功耗指标 还能了解每个 App 的功耗影响指标 第一条轨道显示系统功耗 展示总体能耗情况 值越高 App 可能的功耗就越大 你可以选择其中一段 然后在摘要面板中查看平均值 在这份跟踪数据中 选择一个时间段后 摘要面板显示 10.5%/小时 下一步是查看 App 的功耗影响指标 我可以检查许多 与不同子系统相关的指标: CPU、图形处理器、显示屏和网络 给功耗造成的影响 CPU 功耗影响轨道至关重要 因为 CPU 活动高 是影响功耗的一大因素 持续或高强度使用 CPU 会直接增加功耗 这里的 CPU 功耗影响 出现了一个峰值 恰在我尝试打开“媒体库”面板之后 我将选取峰值前的这一段 以便能够确定 CPU 功耗影响平均值 平均值为 1 现在我要选取峰值这段 CPU 功耗影响平均值是 21 这明显高于之前的水平 这个值是一个评分 可让你识别 意外出现的功耗峰值 并优先调试影响最大的子系统

    Time Profiler 可以帮助查明 CPU 高用量的原因 方法是识别出哪些函数 消耗的 CPU 时间最多 点按 CPU Profiler 将分析重点 放在具体应用程序的代码上 我将检查“调用树”视图 并选择“隐藏系统库” 在“Heaviest Stack Trace”面板中 Instruments 指示 VideoCardView 花费了大量时间 由于这个视图的主体较简单 因此问题可能出在 调用频率上 也就是说 我接下来要查看 LibraryThumbnailView 它负责在“媒体库”面板中显示 视频缩略图 所以很有可能这就是问题所在 我将回到 Xcode 分析这个视图中的代码

    代码会遍历所有视频 为每个视频生成一个 VideoCardView 用于创建缩略图 并创建一个视图来显示它 然后将所有这些视图 放在 VStack 中 如果有数百甚至数千个视频 这种方法会强制 App 在“媒体库”面板显示之前 就载入所有缩略图 并创建所有视图 无论它们是否真的需要显示 这样效率低下 也是 Instruments 中 显示 CPU 使用率高的原因 App 载入内容的负担过重 甚至做了很多无用功 幸运的是 SwiftUI 为此提供了 一个很好的 API:LazyVStack 它只为当前显示的内容 或即将滚动进视野中的内容 创建和呈现视图 这样一来优化就很简单 我要将 VStack 替换为 LazyVStack 我将为它提供相同的一组视频 但这次视图本身会 在我滚动时智能地 创建和销毁内容缩略图 我现在要测试这一优化 再次点按“个人资料” 然后开始记录 接着在我的设备上 打开“媒体库”面板

    我的 App 现在响应灵敏 不再卡顿了 我现在停止记录 向下滚动 到 CPU 功耗影响轨道

    我将选择同一段 以便确定平均值 现在的平均值 为 4.3 比之前的 21 小多了 这就解决了 CPU 问题 在“媒体库”面板中提前 载入所有视频缩略图 就是造成不必要功耗的原因 Instruments 帮助 查明了低效的代码 切换到按需载入 能够改善这个功能的性能 要更深入地了解 CPU 分析和优化技巧 我强烈建议观看 WWDC 视频 “通过 Instruments 优化 CPU 性能” Power Profiler 能提供 宝贵的洞察数据 让你深入了解 App 的功耗 请记住 每当你怀疑有问题 却又 不确定应该重点检查哪个子系统 或者哪里需要优化的时候 就请利用这个功能 到目前为止 我一直将 iPhone 连接到 Xcode 进行性能分析 这对于受控测试很有用 但并非所有问题都能解决 有很多只在实际使用中 才会出现的恼人问题该怎么办呢? 这类问题无法在办公桌上一致地重现 也许你面对的情况是: 在用 CarPlay 车载导航时 你的 App 实际表现如何? 你的增强现实功能 在户外的实际功耗如何? 如果后台电池用量问题要数小时 才会出现 那要如何调试? 质量团队如何才能 通过现场测试 轻松提供可行的功耗诊断结果? 为了解决这些问题 我需要一种方法 来收集现实使用中的数据 而无需直接连接到 Xcode Power Profiler 也可 直接在设备上使用 用于查找开发过程中 无法重现的问题 下面是一个具体示例 最近我的同事说 有一些严重的电池续航问题 我的 App Destination Video 在他的设备上电池用量总是排第一 我试了各种方法 但就是 无法在我的环境中重现 人们使用应用的方式不同 他的情况可能非常少见 而我从没遇到过 多亏了能在设备上进行功耗分析 我不需要拿到他的设备 只需要让他使用 这种新模式收集跟踪数据 并将文件发送给我 我将展示收集 这些数据是多么容易 首先要在“设置”App 中 打开开发者模式 将设备连接到 Xcode 后这个模式就可用了 然后转到开发者设置 中的“性能跟踪” 启用“性能跟踪”后 可以选择 启用 Power Profiler 确保打开这个功能 接下来你要指定要 分析的 App 只有通过 Xcode TestFlight 或企业计划 安装的 App 才能监控 从列表中选择你的 App 很好!现在开始数据收集 从设备右上角向下轻扫 访问“控制中心” 你可以用“性能跟踪”图标 启动数据收集 添加图标后 轻点图标以开始记录 你可以让它运行几个小时 或者直到你能重现问题为止 现在停止收集 只需再次轻点“控制中心”中的 “性能跟踪”图标即可 这将生成一个跟踪文件 其中包含收集的所有功耗指标 你可以将文件发送给 Mac 并直接在 Instruments 中打开 这就好了! 我的同事就是这么做的 现在我要向大家展示 如何分析他发送的文件 以确定根本原因 我将用 Instruments 打开文件 借助设备端功耗跟踪 你可以了解系统级功耗指标 每个 App 的功耗影响指标 和 Time Profiler 这个模式 Time Profiler 采样率 较低 这是为了减轻观察者效应 CPU 功耗影响轨道清楚 显示了 CPU 影响的变化趋势 CPU 影响明显较高的时间段之后 紧跟着 CPU 影响较小的时间段 定期重复 这绝非 Destination Video App 的正常表现 如果我聚焦 其中一个影响较大的区段 就可以找出导致 这种耗电量的原因 我要检查一下 Time Profiler 了解在这期间运行的函数 videoSuggestionsForLocation 首当其冲 占用了大量 CPU 时间 这个函数是为了实现 根据位置推荐视频的功能 也就是推荐有关 附近地标或事件的视频 每当位置更改时都会调用它 这就解释了为什么 我不能在这里重现! 我的办公桌是固定的 位置不会变化 因此当 App 启动时 这个函数可能会 运行一次但随后就不再运行了 但我的同事在通勤期间 使用这个 App 位置一直在移动! 频繁的位置更新触发了 繁重的过滤过程 一遍又一遍 我来快速展示一下 Destination Video App

    这个功能用于 “附近推荐”面板 在这里会弹出那些 基于位置的建议 所有这些都由这个函数驱动 好 我现在知道 导致问题的函数了 我将深入研究代码 找出优化的方法 每当位置变化时 都会调用 videoSuggestionsForLocation 它负责生成 要显示的相关视频列表 每次调用这个函数 它都会读取 RecommendationRules 文件到 Data 对象中 然后使用 JSONDecoder 解析 为 RecommendationRule 映射 而这个 JSON 文件可不小 它有数百个复杂的规则 文件 I/O 和 JSON 解析 尤其对于大文件来说 是非常消耗资源的操作! 每次位置变化 这个 App 就要一遍又一遍地 执行这些繁重工作 这一定是问题的根源 App 运行时 规则本身不会变化 因此 优化基本上 就是延迟载入和解析规则 只执行一次 然后缓存 这种简单的更改将减少 每次位置更新后的工作量 对于我的 App 我要在优化后 让同一位同事再次测试 每当你修复优化 App 后 都可以请某人 在相同的条件下进行测试 获取新的功耗跟踪数据 这样可很好地检验是否 确实修复了之前的问题 同样重要的是 还要检验 你是否在更改时 无意中引入新的功耗问题 这样可以真正帮助你剔除问题 让你对优化充满信心

    好了 我已经介绍了如何 纠错现有问题 但在出品之前 你要如何自信地在两种 优化方案间做出选择呢? 有时优化是两害相权取其轻 减少 CPU 使用率 但可能会增加网络活动 如何了解最终结果 对电池续航有何影响呢? 下面是一个常见情况: 你正在开发一项新功能 你采取了一种实现方法 我们称之为方法 1 它简单直接 当使用少量数据 进行测试时似乎很高效 但你的同事提出了方法 2 它的架构不同 略微复杂一些 面对小型数据集时 也许速度稍慢一些 但它旨在更高效地 处理大量数据 现在你面临两难: 对于电池续航来说 到底哪个方法更好? 仅根据本地测试 或检查代码来做决定 实在太难了 本地测试可能无法代表 典型用例中的数据规模 或网络状况、后台活动 对性能的影响 这时你就可以 利用 Power Profiler 专门来比较影响 你可以为 App 使用方法 1 然后进行分析 接着再分析方法 2 并比较得到的值 请注意 散热、设备状态 系统压力都会影响 最终耗电量 这也包括 App 的状态 比如它管理的数据量 启用了哪些偏好设置或功能 考虑到这些变量 你可以 在不同条件下 让每种方法运行多次 然后取结果的平均值 根据这个平均值 来决定采用 哪些功能和实现 最终优化你的 App 以获得理想体验 Power Profiler 是 开发武库中的众多工具之一 编码时可以用 Xcode Energy Gauges 获得即时反馈 并使用 Instruments 深入研究 使用自动化 XCTest 及早发现问题 出品后可以用 Xcode Organizer、 MetricKit 和 App Store Connect API 监测对实际使用的影响 这些工具能帮你 实现优秀的能效 它们能提供宝贵的 背景信息和洞察数据 有效利用它们 就可以在开发中 制定强大的能效策略 现在你已经掌握了构建 节能 App 所需的工具和知识 尽早经常使用 Power Profiler 根据数据做出决策 基于了解到的情况迭代改进 不妨挑战一下自己: 立即为你的 App 跟踪记录 并检查结果数据! 通过这种有趣的方式 可以将新技能付诸实践 好了 以上就是 我要分享的全部有用技巧 感谢观看!

    • 0:00 - 开场介绍
    • 了解 App 的功耗优化。

    • 1:52 - 调试易于重现的问题
    • Instruments 中的 Power Profiler 是一款非常实用的工具,可以识别 App 中的功耗问题。Wiam 通过一个示例,演示了如何使用这一工具来调查一款流媒体视频播放 App 在添加新的“媒体库”窗格后出现的性能下降问题。 在示例中,Power Profiler 显示 CPU 使用率和功耗在打开“媒体库”窗格后显著上升。通过分析 Instruments 中的跟踪数据,Wiam 发现问题出在预先载入所有视频缩略图的低效代码上。 为了优化性能,她将“VStack”替换为“LazyVStack”,后者仅会在需要时载入视图。实施这一更改后,App 的响应速度更快,CPU 功耗影响显著降低。这证明了 Power Profiler 工具在识别和解决性能瓶颈方面的有效性。

    • 9:37 - 查明根本原因
    • 使用 Power Profiler 工具,可以从实际的 App 使用中收集数据,这对于识别无法在开发过程中重现的问题至关重要。例如,App 的电池续航时间问题可能仅在户外使用或特定导航场景下才会显现。 借助这一工具,可以远程收集测试设备的功耗指标。启用开发者模式和性能跟踪后,测试人员可以在 App 使用期间记录数据,然后与你共享这些数据以进行分析。 通过这个过程,Wiam 诊断出了 App 中的电池续航时间问题。这一问题是由基于位置的推荐功能引起的,这个功能会重复执行资源密集型文件 I/O 和 JSON 解析操作。通过优化这个功能以降低载入和解析数据的频率,她提高了 App 的能效,并成功解决了这一问题。

    • 16:19 - 比较功耗
    • 在开发新功能时,如果面临两种实现方法,请使用 Power Profiler 来比较它们对电池续航时间的影响。在各种条件下运行多项测试,以考虑数据大小、网络和设备状态等变量。然后对结果取平均值,以做出明智的决策。

    • 18:25 - 主动优化
    • Xcode、Instruments 和平台 SDK 提供了一整套工具 (包括 Energy Gauges、Instruments、XCTest、Organizer、MetricKit 和 App Store Connect API),可供你在 App 开发过程中以及发布后监控和优化 App 的能效。

Developer Footer

  • 视频
  • WWDC25
  • 分析并优化 App 的功耗
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习与 AI
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载 (英文)
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    获取 Apple Developer App。
    版权所有 © 2025 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则