Firebase Performance — 是什么、监控工具和指标

作者: IT Sectr 发布日期: 2026-05-30 阅读时间: 10 分钟

Firebase Performance Monitoring 是 Google 提供的一款免费工具,用于实时跟踪移动应用程序的性能。该服务自动收集启动时间、屏幕渲染速度和 HTTP 请求持续时间的指标,无需为基本场景编写代码。根据 Google Firebase, 2025 的数据,SDK 无需额外配置即可自动跟踪高达 90% 的网络请求。该工具适用于 Android、iOS 和 Firebase 生态系统内的 Web 应用程序。

要点

  • Firebase Performance — 为移动应用程序提供免费的实时性能监控。
  • 自动跟踪 无需编写代码即可收集启动、屏幕和网络请求的指标。
  • 自定义跟踪 允许跟踪任何业务场景——从下订单到加载图像。
  • HTTP 指标 包括每个请求的响应时间、负载大小和状态码。
  • Firebase 控制台 提供按设备、操作系统版本和地区划分的摘要,并支持按百分位数过滤。

什么是 Firebase Performance Monitoring?

Firebase Performance Monitoring 是 Google 的一项云服务,用于收集和显示移动应用程序的性能指标。该服务是 Firebase 工具集的一部分,无需单独付费——监控在免费 Spark 套餐(每天 500,000 个事件限制)和付费 Blaze 套餐中均可用。Firebase Performance 自动为标准场景生成跟踪:屏幕冷启动、热启动、后台 HTTP 请求。

该服务的架构基于两种数据类型:traces(跟踪)和 metrics(指标)。跟踪是一个有时间起点和终点的时间间隔,用于测量执行持续时间。指标是一个数值:响应大小、错误频率、速度(字节/秒)。每个跟踪可以包含多个指标。SDK 在设备上收集数据,进行缓冲,并以低延迟优先级在后台发送到 Firebase,以避免影响用户体验。

根据 Google I/O 2024 报告,Firebase Performance 在全球超过 200 万个应用程序中使用。如果配置了警报,使用 Firebase Performance 检测性能问题的平均时间为发布后 15 分钟。如果没有监控,类似问题平均需要 2-3 天才能根据用户向支持部门的投诉被发现。

与 Firebase Crashlytics 的区别

Crashlytics 跟踪崩溃和致命错误——应用程序意外停止的情况。Firebase Performance 监控运行中应用程序的性能:慢速屏幕、长时间的网络请求、UI 响应延迟。Crashlytics 回答“应用程序为什么崩溃?”的问题,而 Performance 回答“应用程序为什么运行缓慢?”的问题。两个服务通过一个 SDK(Firebase Core)集成,数据在 Firebase 控制台的相关部分中显示。

百分位指标

Firebase Performance 不显示平均值——只显示 百分位数:P50、P75、P90、P95、P99。这对性能至关重要:平均时间会隐藏异常值。如果 99 个用户在 200 毫秒内打开屏幕,而一个用户需要 20 秒,平均值约为 400 毫秒,看起来可以接受。P99 将显示 20 秒——真正的问题。Firebase 在时间线上显示百分位数,可以精确到小时跟踪性能回归。

Firebase Performance Monitoring 如何工作

Firebase Performance SDK 通过标准集成方式集成到应用程序中:在 Gradle(Android)中添加依赖项或通过 CocoaPods(iOS)。在代码中初始化 Firebase 后,SDK 自动开始收集指标,无需额外配置。一个重要的工作原理是 延迟收集:SDK 不会立即发送数据,而是累积数据,并在网络条件有利时批量传输。

对于 iOS,SDK 使用 NSURLProtocol 拦截 HTTP 请求,对于 Android,使用 OkHttp Interceptor。如果应用程序不使用 OkHttp,SDK 会自动包装 HttpURLConnection。被拦截的请求会丰富元数据:Content-Type、响应状态、字节大小、持续时间。所有数据通过 HTTPS 使用 TLS 1.3 加密传输到 Firebase 服务器。

Firebase Performance 的关键要求之一是成为 Gradle 插件列表中的最后一个插件。如果顺序被打乱,SDK 可能无法拦截所有请求或无法正确测量启动时间。Firebase 建议将插件放在 plugins 块的末尾,在 Crashlytics 和其他 Google Services 插件之后。

groovy
// build.gradle (Module: app) — 插件的正确顺序
plugins {
    id "com.android.application"
    id "org.jetbrains.kotlin.android"
    id "com.google.gms.google-services"
    id "com.google.firebase.crashlytics"
    id "com.google.firebase.firebase-perf"  // 最后!
}

dependencies {
    implementation platform("com.google.firebase:firebase-bom:33.0.0")
    implementation "com.google.firebase:firebase-perf"
}

自动跟踪:屏幕、启动、网络

Firebase Performance 创建三种类型的自动跟踪:screen trace(屏幕渲染时间)、app start trace(应用程序启动时间)和 network request trace(HTTP 请求)。Android 的 screen trace 测量从 Activity.onCreate 调用到第一帧渲染完成之间的时间。对于 iOS,测量 viewDidLoad 和 viewDidAppear 之间的时间。Firebase 使用 Activity 或 ViewController 的类名自动为每个屏幕创建跟踪。

App start trace 分为两种类型:冷启动(应用程序从零开始启动,进程不存在)和热启动(应用程序从后台状态恢复)。冷启动是最关键的指标,因为它包括所有 SDK 的初始化、DEX 文件的加载和第一个 Activity 的创建。Firebase 从进程启动时刻到第一个屏幕完全渲染测量冷启动。根据 Google 的建议,冷启动的 P50 不应超过 500 毫秒,P99 不应超过 2 秒。

Network request trace 自动记录每个 HTTP 请求及其元数据:URL、方法、响应代码、响应大小、传输速度。在 Firebase Performance 控制台中,可以按 URL 模式过滤请求——例如,显示所有指向 /api/v2/orders 的请求。对于每个模式,显示响应时间的百分位数和 4xx/5xx 错误的频率。这使得无需配置单独的警报即可快速检测特定 API 的性能下降。

屏幕指标详解

对于屏幕,Firebase Performance 还会计算 “frozen frames” 指标——渲染时间超过 700 毫秒的帧。这种 UI 冻结被用户感知为“应用程序卡住了”。如果屏幕上超过 1% 的 frozen frames,Firebase 将该指标标记为有问题。对于 Android,SDK 还会收集 slow renders 指标——超过 16 毫秒的帧(丢失 60 FPS)。Screen trace 和 frozen frames 的结合提供了加载时间和动画流畅度的完整画面。

用于业务场景的自定义跟踪

自定义跟踪 允许测量任何用户场景的持续时间:下订单、上传图像到云、数据同步。开发者在代码中明确指定跟踪的起点和终点,并为场景命名。与自动跟踪不同,自定义跟踪可以完全控制测量内容,并允许添加属性进行过滤。

每个自定义跟踪可以包含 属性——作为元数据添加的键值对。属性有助于数据分段:例如,可以为 “promo_user” 和 “regular_user” 分别跟踪下订单时间。Firebase Performance 每个跟踪最多支持 5 个属性,每个属性最多支持 100 个唯一值。属性被索引,可在 Firebase 控制台中用于过滤。

根据 Google I/O 2024 报告,Spotify 团队使用 Firebase 自定义跟踪来监控曲目切换时间。这通过识别音频缓冲区缓存中的瓶颈,将中位切换时间从 400 毫秒减少到 120 毫秒。关键的发现是按 “device_model” 属性进行过滤——问题仅出现在 Android 13 的 Samsung 设备上。

kotlin
import com.google.firebase.perf.FirebasePerformance
import com.google.firebase.perf.metrics.Trace

class CheckoutTracker {

    private val firebasePerf = FirebasePerformance.getInstance()

    fun trackCheckoutFlow(userId: String, promoApplied: Boolean) {
        val trace: Trace = firebasePerf.newTrace("checkout_flow")
        trace.putAttribute("promo_user", promoApplied.toString())
        trace.putAttribute("user_tier", "premium")
        trace.start()

        // 执行下单场景
        validateCart()
        processPayment()
        confirmOrder()

        trace.stop()
    }
}

将 Firebase Performance 集成到 Android 项目

将 Firebase Performance 集成到 Android 需要三个步骤:添加 google-services 插件、连接 Firebase BOM(Bill of Materials)以及添加 firebase-perf 依赖项。如果使用 AppCompatActivity,Firebase Performance 将自动在所有 Activity 和 Fragment 上运行。对于 Compose 屏幕,Firebase 建议使用自定义跟踪,因为自动 screen trace 不直接支持 Compose。

一个重要细节:Firebase Performance Gradle 插件在编译阶段修改应用程序的字节码。插件向每个 Activity 和 OkHttp 客户端添加检测代码。这可能会将构建时间增加 5-10%,APK 大小增加 200-400 KB。在调试构建中,Firebase Performance 会自动禁用——这可以防止在本地开发期间指标失真。要在调试中强制启用,请使用清单中的 firebasePerformanceInstrumentationEnabled 标志。

Firebase Performance 还支持 iOS 的 MetricKit 和 Android 的 Perfetto——低级别系统跟踪器。MetricKit 提供操作系统级别的帧率、CPU 和内存消耗数据。Firebase 聚合这些数据,并在显示 HTTP 跟踪和 screen trace 的同一控制台中显示,将系统和应用程序遥测数据结合在一个界面中。

使用 OkHttp 的 HTTP 请求

kotlin
import okhttp3.OkHttpClient
import com.google.firebase.perf.network.FirebasePerfOkHttpClient

val client = OkHttpClient.Builder()
    .addInterceptor FirebasePerfOkHttpClient
    .build()

val request = Request.Builder()
    .url("https://api.example.com/orders")
    .build()

client.newCall(request).enqueue(object : Callback {
    override fun onFailure(call: Call, e: IOException) { /* handle */ }
    override fun onResponse(call: Call, response: Response) { /* handle */ }
})

将 Firebase Performance 集成到 iOS 项目

对于 iOS,Firebase Performance 的集成通过 CocoaPodsSwift Package Manager 完成。安装 FirebasePerformance 和 FirebaseCore pods 后,SDK 自动开始收集指标。为了拦截 HTTP 请求,Firebase Performance iOS 使用 NSURLProtocol——一种允许拦截应用程序中所有 URL 加载的系统机制。SDK 在启动时注册自己的 NSURLProtocol 子类,所有通过 URLSession 的请求自动受到监控。

iOS 的限制:Firebase Performance 不支持 SwiftUI 的自动 screen trace。对于 SwiftUI 应用程序,需要手动创建自定义跟踪,将 View 的主体包装在 start/stop 块中。Firebase 正在开发对 SwiftUI 的原生支持,但目前 SDK 仅自动跟踪 UIView 控制器。对于 UIKit + SwiftUI 的混合应用程序,建议在 UIKit 中创建屏幕,并通过 UIHostingController 嵌入 SwiftUI。

Firebase Performance iOS 还提供与 MetricKit——Apple 框架的集成,该框架在操作系统级别收集诊断数据。MetricKit 发送每日报告,包含 CPU、GPU、内存和帧率指标。Firebase Performance 聚合这些报告,并在控制台中与自定义跟踪一起显示,提供应用程序和系统级别的性能完整视图。

swift
import FirebasePerformance

final class ImageUploadService {

    func uploadImage(_ data: Data, to url: URL) async throws {
        guard let trace = Performance.startTrace(name: "image_upload") else { return }
        trace?.setValue("image/jpeg", forAttribute: "content_type")
        trace?.setValue("\(data.count)", forAttribute: "file_size")

        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.httpBody = data

        let (_, response) = try await URLSession.shared.data(for: request)
        guard let httpResponse = response as? HTTPURLResponse else { return }
        trace?.setValue("\(httpResponse.statusCode)",
                        forAttribute: "status_code")
        trace?.stop()
    }
}

常见问题

Firebase Performance 是免费的吗?

是的,Firebase Performance 在 免费 Spark 套餐 中可用,每天限制 500,000 个事件。对于数据量较大的项目,使用 Blaze 套餐,按使用量付费:超出限制每 1000 个事件 0.0003 美元。对于大多数初创公司和中等规模的项目,每天 500,000 个事件已经足够。

SDK 会影响应用程序的性能吗?

Firebase Performance SDK 针对最小影响进行了优化。数据发送在 后台线程 中以低优先级进行。根据 Google 测试,SDK 对启动时间的影响小于 1%。SDK 大小约为 Android 300 KB,iOS 250 KB。

哪些指标会自动收集?

自动收集 app start(冷/热启动)、screen rendering(每个屏幕的渲染时间)、HTTP 请求(时间、大小、状态)和 frozen frames。对于 Android,还会收集 slow renders(>16 毫秒)的频率和 ANR。

如何为调试构建禁用 Firebase Performance?

Firebase Performance 在调试模式下自动禁用。要强制控制,请使用 Android 清单中的 firebasePerformanceInstrumentationEnabled 标志。对于 iOS,通过启动方案参数中的 -FIRPerformanceEnabled NO 标志进行禁用。

可以导出 Firebase Performance 数据吗?

是的,Firebase Performance 支持导出到 BigQuery。项目连接到 BigQuery 后,所有指标自动复制到 BigQuery 表中,可用于 SQL 查询和在 Looker Studio 中创建仪表板。导出在 Firebase 控制台的 Integrations 部分进行配置。

总结

  • Firebase Performance — 免费的性能监控工具,自动跟踪屏幕和 HTTP 请求。
  • 自动跟踪 涵盖 app start、screen rendering 和网络请求,无需一行代码。
  • 带属性的自定义跟踪 允许按设备、版本或用户状态过滤,跟踪任何业务场景。
  • 百分位数 P50-P99 提供与平均值相比更真实的性能视图。
  • 与 Firebase Crashlytics 和 BigQuery 集成 创建统一的应用程序质量监控生态系统。
  • 对性能的影响最小——启动时间影响小于 1%,应用程序大小增加最多 400 KB。
  • 建议:在开发的所有阶段(包括生产环境)使用 Firebase Performance,以便及早发现回归问题。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读