iOS+
Android
Web
本页面提供了有关开始使用 Performance Monitoring 或者使用 Performance Monitoring 功能和工具的问题排查提示。
排查问题前的首要检查
作为最佳实践,在进一步排查问题之前,建议您先执行以下两项检查。
1. 检查日志消息中是否有性能事件
检查您的日志消息,确保 Performance Monitoring SDK 正在捕获性能事件。
如何查看日志消息中的性能事件
打开浏览器的开发者工具(例如,通过 Chrome DevTools 的“网络”标签页 打开或在 Firefox 的网络监视器 中打开)。
在浏览器中刷新您的 Web 应用。
检查您的日志消息中是否有错误消息。
几秒钟后,在浏览器的开发者工具中查找对 firebaselogging.googleapis.com
的网络调用。如果存在该网络调用,表示浏览器正在向 Firebase 发送性能数据。
如果您的应用未记录性能事件,请查看问题排查提示 。
2. 查看 Firebase 状态信息中心
检查 Firebase 状态信息中心 ,确定是否存在已知的 Firebase 或 Performance Monitoring 服务中断。
Performance Monitoring 使用入门
如果您刚开始使用 Performance Monitoring
(iOS+ |
Android |
Web ),以下问题排查提示可帮助您解决在 Firebase 检测 SDK 或在 Firebase 控制台中显示您的第一组性能数据时发生的问题。
已将 SDK 添加到应用,但控制台仍要求添加 SDK
Firebase 可以通过接收来自应用的事件信息(如应用交互)来检测 Performance Monitoring SDK 是否已成功添加到您的应用。通常,在启动应用后的 10 分钟内,Firebase 控制台的“性能” 信息中心 就会显示“已检测到 SDK”消息。之后,信息中心会在 30 分钟内显示最初经过处理的数据。
如果在添加最新版 SDK 10 分钟后仍然未看到任何变化,请检查您的日志消息 以确保 Performance Monitoring 正在记录事件。请按照下文所述的相应问题排查步骤进行操作,排查 SDK 检测消息延迟的问题。
应用正在记录事件:问题排查步骤
注意 :Performance Monitoring SDK 在本地对事件进行批处理,然后定期将事件发送到 Firebase。这意味着,在发生应用交互后,Firebase 不会立即收到来自应用的事件信息。
如果您仍在本地进行开发,请尝试生成更多事件以便收集数据:
在本地环境中提供和查看您的 Web 应用。
可通过以下方法生成事件:为您的网站加载子页面、与您的应用进行交互,以及触发网络请求。网页加载后,请确保让浏览器标签页至少保持打开状态 10 秒。
确保您的 Firebase 配置对象 已正确添加到您的应用,并且您没有修改过该对象。
具体来说,请检查以下内容:
您的应用的配置对象中的 Firebase Web 应用 ID (appId
) 正确无误。您可以在 settings 项目设置 的 “您的应用”卡片中找到 Firebase 应用 ID。
如果您的应用中的配置对象看似有误,请尝试以下操作:
删除应用中当前存在的配置对象。
按照这些说明 获取新的配置对象并将其添加到您的 Web 应用。
如果 SDK 正在记录事件,并且一切设置均正确,但 2 小时后,您仍未看到 SDK 检测消息或已处理的数据,请与 Firebase 支持团队联系 。
应用 未记录事件:问题排查步骤
确保 Performance Monitoring SDK 在您的应用中正确初始化 。
检查以下标志,确保 Performance Monitoring SDK 未 停用:
performance.instrumentationEnabled
确保您的浏览器缓存 已 停用,否则浏览器可能不会提取任何新的插桩设置。
关闭网页标签页,然后重新打开。再次检查日志记录。
如果您刚刚在应用中添加了 Performance Monitoring SDK,则可能需要完全重启您的应用,SDK 才能开始运行。
如果您在应用中未找到任何停用的内容,请与 Firebase 支持团队联系 。
常规问题排查
如果您已成功添加 SDK 并在应用中使用 Performance Monitoring ,以下问题排查提示可帮助解决关于 Performance Monitoring 功能和工具的常规问题。
应用未记录性能事件
如果您没有看到性能事件的日志消息 ,请尝试执行以下问题排查步骤:
确保 Performance Monitoring SDK 在您的应用中正确初始化 。
检查以下标志,确保 Performance Monitoring SDK 未 停用:
performance.instrumentationEnabled
确保您的浏览器缓存 已 停用,否则浏览器可能不会提取任何新的插桩设置。
关闭网页标签页,然后重新打开。再次检查日志记录。
如果您刚刚在应用中添加了 Performance Monitoring SDK,则可能需要完全重启您的应用,SDK 才能开始运行。
如果您在应用中未找到任何停用的内容,请与 Firebase 支持团队联系 。
性能信息中心缺少自定义跟踪记录数据
您看到了自动收集的跟踪记录的性能数据,但没有看到自定义代码跟踪记录的性能数据 ?请尝试执行以下问题排查步骤:
检查使用 Trace API 进行插桩的自定义代码跟踪记录的设置,尤其是以下内容:
自定义代码跟踪记录和自定义指标的名称必须符合以下要求:没有前导空格或尾随空格,没有前导下划线 (_
) 字符,长度上限为 32 个字符。
所有跟踪记录都必须有开始和停止。任何未开始、未停止或在开始前停止的跟踪记录都不会被记入日志。
请注意,如果您使用的是 record()
方法,则无需明确开始或停止跟踪记录。
检查以下标志,确保 Performance Monitoring 数据收集功能未 停用 :
检查您的日志消息 ,确保 Performance Monitoring 正在记录预期的自定义代码跟踪记录。
如果 Performance Monitoring 正在记录事件,但 24 小时后未显示任何数据,请与 Firebase 支持团队联系 。
性能信息中心缺少网络请求数据
如果缺少网络请求数据,请注意以下事项:
常见问题解答
iOS+
Android
Web
“项目”首页上的“性能”卡片中的“常见问题”发生了什么变化?
我们近期推出了提醒功能(该功能会在相应指标超过您设置的阈值时自动通知您),随后将常见问题 替换为近期提醒 。问题现已弃用 ,并替换为提醒。
“性能”卡片顶部的应用选择器会过滤近期提醒 下的提醒条目。系统仅显示与所选应用有关的三项最新提醒。
如需详细了解提醒,请参阅针对性能问题设置提醒 。
在控制台中为问题设置阈值的功能发生了什么变化?
Performance Monitoring 支持为超出定义阈值的指标发出提醒 。为避免与这些可配置的性能指标阈值混淆,我们移除了为问题 配置阈值的功能。
Firebase 控制台中的“详细信息”和“指标”信息发生了什么变化?
我们已将“详细信息”和“指标”页面替换为重新设计的集中式界面 (UI),以改进您排查问题的方式。这一新的问题排查界面提供的核心功能与“详细信息”和“指标”提供的核心功能相同。如需详细了解如何排查问题,请参阅查看特定跟踪记录的更多数据 。
为什么样本数量不符合预期?
Performance Monitoring 会从您应用的用户设备收集性能数据。如果您的应用有许多用户,或者应用生成大量性能活动,Performance Monitoring 可能会将数据收集的范围限定为一部分设备,以减少已处理的事件数量。这些限制足够高,因此即使事件较少,指标值仍然能代表用户的应用体验。
为了管理我们收集的数据量,Performance Monitoring 使用以下采样选项:
设备端速率限制 :为了防止设备突然发送大量跟踪记录,我们将从一台设备发送的代码和网络请求跟踪记录的数量限制为每 10 分钟最多 300 个事件。此方法可以保护设备免受可能发送大量性能数据的循环插桩的影响,并且可防止个别设备导致性能衡量结果出现偏差。
动态采样 :对于所有应用用户的每个应用,Performance Monitoring 每天会分别收集有限数量的代码跟踪记录和网络请求跟踪记录。系统会从设备上获取动态采样率(使用 Firebase Remote Config ),以确定任一台随机设备是否应捕获和发送跟踪记录。如果设备未被选择用于采样,则不会发送任何事件。动态采样率因应用而异,并且经过调整,以确保已收集的数据总量保持在限额之内。
用户会话从用户设备发送额外的详细数据,需要更多资源来捕获和发送数据。为了最大限度地降低用户会话的影响,Performance Monitoring 可能还会限制会话数量。
服务器端速率限制 :为确保应用不超出采样限制,Performance Monitoring 可能会使用服务器端采样来删除设备发送的部分事件。虽然这种限制不会改变指标的有效性,但可能会导致细微的模式变化,包括:
跟踪记录的数量可能与一段代码的执行次数不同。
代码中紧密耦合的跟踪记录可能各自具有不同数量的样本。
注意: 随着 Performance Monitoring 的发展,特定的采样限制及其应用可能会发生变化。
控制台中的 “问题”标签页有何变化?
我们将“问题”标签页替换为“提醒”标签页,它会在超出您设置的阈值时自动通知您。您不再需要手动查看 Firebase 控制台来确定是否超过了阈值。要了解提醒,请参阅针对性能问题设置提醒 。
控制台中的 “设备上”和 “网络”标签页有何变化?
如何查看这些页面上的跟踪记录?
我们重新设计了 Firebase 控制台的 Performance Monitoring 部分,使得“信息中心” 标签页在一个位置显示关键指标和您的所有跟踪记录。在重新设计过程中,我们移除了 “设备上”和 “网络”页面。
“信息中心”标签页底部的跟踪记录表包含 “设备上”和 “网络”标签页上显示的所有信息,但新增了一些功能,包括按特定指标的百分比变化对跟踪记录进行排序。如需查看特定跟踪记录的所有指标和数据,请点击跟踪记录表中的跟踪记录名称 。
在跟踪记录表的以下子标签页中查看跟踪记录:
网络请求跟踪记录(开箱即用和自定义)- “网络请求”子标签
自定义代码跟踪记录 - “自定义跟踪记录” 子标签
应用启动、应用前台活动、应用后台活动跟踪记录 - “自定义跟踪记录”子标签
屏幕呈现跟踪记录 - “屏幕呈现”子标签页
网页加载跟踪记录 - “网页加载”子标签
如需详细了解跟踪记录表并查看指标和数据,请访问控制台概览页面 (iOS+ | Android | Web )。
为什么呈现速度缓慢的帧和冻结的帧的数量不符合预期?
系统在计算呈现速度缓慢的帧和冻结的帧时会假定设备刷新频率为 60Hz。如果实际的设备刷新频率低于 60Hz,则每帧的呈现速度会更缓慢,因为每秒呈现的帧数会更少。如果呈现速度更缓慢,由于有更多帧会呈现得更慢或冻结,因此可能会导致系统报告的呈现速度缓慢的帧或冻结的帧的数量增加。不过,如果设备刷新频率高于 60Hz,那么每帧的呈现速度也会相应地更快;这也会减少系统报告的呈现速度缓慢的帧或冻结的帧的数量。这是 Performance Monitoring SDK 中的一项当前限制。
如何将较小的命名空间型 Performance Monitoring JS SDK(“独立”SDK)添加到我的 Web 应用中?
如果 Performance Monitoring 是您的应用中唯一的 Firebase 产品,并且您希望实现以下目的,则可以使用独立 Performance Monitoring SDK(以及下文推荐的文件头脚本):
使用命名空间型库
缩小您的 SDK 软件包的大小
将该 SDK 的初始化操作延迟到网页加载之后
如需将独立的 Performance Monitoring SDK 添加到应用,并将其初始化操作延迟到网页加载之后,请执行以下操作:
将以下脚本添加到您的索引 (index) 文件的文件头中。
确保添加应用的 Firebase 项目配置对象 。
( function ( sa , fbc ){ function load ( f , c ){ var a = document . createElement ( 'script' );
a . async = 1 ; a . src = f ; var s = document . getElementsByTagName ( 'script' )[ 0 ];
s . parentNode . insertBefore ( a , s );} load ( sa );
window . addEventListener ( 'load' , function (){ firebase . initializeApp ( fbc ) . performance ()});
})( performance_standalone , firebaseConfig );
其中
performance_standalone 是 'https://www.gstatic.com/firebasejs/11.0.2/firebase-performance.js'
firebaseConfig 是应用的 Firebase 配置对象
上面的脚本会异步加载独立 SDK,然后在窗口的 onload
事件触发后 初始化 Firebase。此策略可以减少该 SDK 可能对网页加载指标 造成的影响,因为浏览器在您初始化该 SDK 时已经报告了其加载指标。
注意 :使用独立的 Performance Monitoring SDK 时,您无需专门添加 Firebase 核心 SDK,因为独立 SDK 包含自己的轻量级 Firebase 核心 SDK。
了解独立的 Performance Monitoring SDK 和文件头脚本
此独立 SDK 的大小做过优化,经 Gzip 压缩后,大小约为 10KB。它具有 Firebase Performance Monitoring 的所有功能和最小的 Firebase 核心 SDK 功能集。
Firebase Performance Monitoring 使用旧式浏览器不具备的 fetch
和 Promise
API。这些 API 的 polyfill 包含在标准 Firebase Performance Monitoring JS SDK 中,但为了缩减大小,独立 SDK 中省略了这些 polyfill。
Performance Monitoring SDK 部分依赖于 Resource Timing API 从浏览器获取网页加载指标。
以下代码段分解了包含并延迟该 SDK 初始化操作的文件头脚本:
( function ( sdkSource , firebaseConfigObject ) {
function load ( f , c ) {
// Creates a script tag to load the standalone SDK
var sdkScript = document . createElement ( 'script' );
// Sets it to an async script so that it doesn 't interfere with page load
sdkScript . async = 1 ;
// Sets the source of the script
sdkScript . src = f ;
// Inserts the script into the head of the page
var s = document . getElementsByTagName ( 'script' )[ 0 ];
s . parentNode . insertBefore ( sdkScript , s );
}
// Calls the load method
load ( sdkSource );
// Initializes the SDK only when the onload method is called
window . addEventListener ( 'load' , function () {
firebase . initializeApp ( firebaseConfigObject ) . performance ();
});
})( performance_standalone , firebaseConfig );
其中
performance_standalone 是 'https://www.gstatic.com/firebasejs/11.0.2/firebase-performance-standalone.js'
firebaseConfig 是应用的 Firebase 配置对象
近乎实时地处理和显示数据
“近乎实时”的性能数据是什么意思?
Firebase Performance Monitoring 会对收集到的性能数据进行即时处理,从而在 Firebase 控制台中近乎实时地显示数据。已处理的数据会在几分钟内(从收集数据时开始算起)显示在控制台中,因此称为“近乎实时”。
要充分利用近乎实时的数据处理功能,请确保您的应用使用的是实时兼容的 SDK 版本 。
如何获得我的应用的近乎实时的性能数据?
要充分利用近乎实时的数据处理功能,您只需要确保您的应用使用与实时数据处理兼容的 Performance Monitoring SDK 版本。
以下是实时兼容的 SDK 版本:
iOS - v7.3.0 或更高版本
tvOS - v8.9.0 或更高版本
Android - v19.0.10 或更高版本(或 Firebase Android BoM v26.1.0 或更高版本)
Web — v7.14.0 或更高版本
请注意,我们始终建议使用最新版 SDK,但上文列出的任何版本都支持 Performance Monitoring 以近乎实时的方式处理您的数据。
哪些 Performance Monitoring SDK 版本兼容实时数据?
以下是与实时数据数据处理功能兼容的 SDK 版本:
iOS - v7.3.0 或更高版本
tvOS - v8.9.0 或更高版本
Android - v19.0.10 或更高版本(或 Firebase Android BoM v26.1.0 或更高版本)
Web — v7.14.0 或更高版本
请注意,我们始终建议使用最新版 SDK,但上文列出的任何版本都支持 Performance Monitoring 以近乎实时的方式处理您的数据。
如果我没有将应用更新为使用兼容实时数据的 SDK 版本,会有什么后果?
如果您的应用未使用实时兼容的 SDK 版本,您仍会在 Firebase 控制台中看到应用的所有性能数据。不过,性能数据的显示会延迟大约 36 小时(从收集数据时开始算起)。
我已更新为实时兼容的 SDK 版本,但我的部分用户仍在使用旧版应用。我是否能够继续在 Firebase 控制台中看到其性能数据?
是的!无论应用实例使用哪种 SDK 版本,您都将看到所有用户的性能数据。
但是,如果您要查看近期 数据(存在时间大约不到 36 小时),那么显示的数据来自使用实时兼容 SDK 版本的应用实例用户。而非近期 数据则包括应用所有版本的性能数据。
在联系 Firebase 支持团队 时,请务必提供 Firebase 应用 ID。您可以在 settings 项目设置 的“您的应用” 卡片中找到 Firebase 应用 ID。