iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
Mobile Development

Android 性能戰爭:從 Profiler 開始的 30 天優化實錄系列 第 29

# Day 29:【自動化戰爭】Firebase Performance Monitoring

  • 分享至 

  • xImage
  •  

各位戰士,歡迎來到第二十九天的戰場。至此,我們已經建立了一套強大的、多層次的性能防護體系:StrictMode 在開發時監督我們,Macrobenchmark 為我們提供了客觀的性能標尺,而 CI/CD 則將這一切自動化,防止性能衰退。

但這一切,都發生在我們的「實驗室」裡——在我們配置的模擬器或測試設備上。真實的世界遠比實驗室複雜:

  • 使用者的手機可能是三年前的低階機型。
  • 他們的網路可能是在移動的火車上斷斷續續的 3G 連線。
  • 他們手機上可能同時運行著數十個背景服務,擠占 CPU 和記憶體。

我們的應用程式在這些真實、惡劣的環境下表現如何?這就是真實使用者監控 (Real User Monitoring, RUM) 要回答的問題。今天,我們將整合 Firebase Performance Monitoring,這個由 Google 提供的強大 RUM 工具,來收集來自真實戰場的情報。


什麼是 Firebase Performance Monitoring?

它是一個 SDK,當你將它整合進你的應用程式後,它會自動地從你全球的使用者設備上收集關鍵的性能數據,並將這些數據匯總到 Firebase 的雲端後台,以清晰的圖表呈現給你。

你不需要寫一行程式碼,就能自動開始收集以下情報:

  1. 應用程式啟動追蹤:自動測量所有真實使用者的冷啟動、溫啟動、熱啟動時間。
  2. 畫面轉譯性能:自動監測你應用中每一個畫面 (Activity) 的緩慢轉譯影格凍結影格的比例。這能直接告訴你,哪個畫面是使用者眼中最卡頓的。
  3. 網路請求追蹤:自動監控應用發出的所有 HTTP/S 網路請求的回應延遲、酬載大小、成功率

它能幫你回答一些至關重要的問題,例如:「我們新版本發佈後,巴西使用者的冷啟動時間真的改善了嗎?」或者「為什麼『搜尋結果頁』的卡頓率遠高於其他頁面?」


部署你的「戰地記者」—— 整合 SDK

Firebase Performance 的整合過程極其簡單,幾乎是「零成本」的。

  1. 前置作業:確保你的專案已經在 Firebase Console 中建立,並且你的 Android 應用已經與之關聯(通常是透過 google-services.json 檔案)。

  2. 添加依賴:修改你的 build.gradle.kts (或 build.gradle) 檔案。

// 專案層級的 build.gradle.kts
plugins {
    // ...
    // 添加 Google Services Plugin
    id("com.google.gms.google-services") version "4.4.1" apply false
}

// 應用程式層級的 build.gradle.kts
plugins {
    // ...
    // 應用 Google Services Plugin
    id("com.google.gms.google-services")
    // 應用 Firebase Performance Plugin
    id("com.google.firebase.firebase-perf")
}

dependencies {
    // 引入 Firebase BOM (物料清單),統一管理版本
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))

    // 添加 Performance Monitoring 的 KTX 依賴
    implementation("com.google.firebase:firebase-perf-ktx")
}

完成了。

是的,你沒看錯。只需要添加這幾行 Gradle 設定,重新建構並發佈你的應用,Firebase Performance 就會開始自動收集上述的三大類數據。你無需在你的 Kotlin/Java 程式碼中做任何事情。

進階偵查:自訂追蹤 (Custom Traces)
除了自動收集的數據,我們還可以手動監測應用中特定程式碼區塊的執行時間。這被稱為「自訂追蹤」。

適用場景:

  • 測量使用者從點擊「上傳」按鈕到上傳成功的完整流程耗時。

  • 測量本地資料庫一次複雜查詢和資料處理的耗時。

  • 測量一張複雜圖片載入並套用濾鏡的總耗時。

如何使用?
firebase-perf-ktx 函式庫提供了非常優雅的 trace 擴充套件函式。

import com.google.firebase.perf.ktx.performance
import com.google.firebase.perf.ktx.trace
import com.google.firebase.Firebase

suspend fun processAndUploadImage(imageUri: Uri) {
    // 啟動一個名為 "image_upload_process" 的自訂追蹤
    Firebase.performance.trace("image_upload_process") {
        
        // ... 你的程式碼 ...
        val processedImage = processImage(imageUri) // 步驟一:處理圖片
        
        // 你還可以添加自訂的指標,例如記錄圖片大小
        incrementMetric("image_size_kb", processedImage.sizeInKb)
        
        uploadImageToServer(processedImage) // 步驟二:上傳圖片
    }
}

現在,image_upload_process 這個區塊的執行時間,就會被從全球使用者那裡收集起來,匯總到你的 Firebase 後台。

分析戰報:Firebase Console

數據收集幾小時後,你就可以登入 Firebase Console,進入「Performance」分頁,查看你的戰報。你會看到:

  • 清晰的儀表板,展示了應用啟動時間的趨勢圖,並可以按國家、設備、App 版本等維度進行篩選。

  • 一張表格,列出了你應用中所有畫面的緩慢/凍結影格比例,讓你一眼就看出哪個畫面問題最嚴重。

  • 一張網路請求表格,列出了最慢的 API 端點。

  • 你建立的所有自訂追蹤的性能報告。

這些來自真實世界的數據,將為你下一步的優化工作提供最寶貴的指導。如果數據顯示 90% 的卡頓都發生在 SearchActivity,那麼你就知道,下一次的「軍事行動」,目標就是它。

今日總結

今天,我們將性能監控的觸角從「實驗室」伸向了「真實世界」。

  • 我們認識到真實使用者監控 (RUM) 的重要性,它彌補了本地測試與真實場景之間的差距。

  • 我們學會了如何輕鬆整合 Firebase Performance Monitoring,實現對應用啟動、畫面轉譯、網路請求的自動化監控。

  • 我們掌握了使用自訂追蹤來測量特定業務邏輯性能的方法。

Firebase Performance 讓我們從「我認為這裡可能慢」,轉變為「數據告訴我這裡就是慢」。它為我們的性能優化工作提供了最終的、由真實使用者驅動的決策依據。

至此,我們已經學習了所有新的工具和戰術。明天,這場長達 30 天的戰爭將迎來最終的收官。我們將發布【終戰詔書】,回顧整場戰爭,總結我們的勝利果實,並確立一套可以持續作戰的、永不眠的性能優化流程。

我們明天,也是最後一天見!


上一篇
# Day 28:【自動化戰爭】在 CI/CD 中運行 Benchmark
系列文
Android 性能戰爭:從 Profiler 開始的 30 天優化實錄29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言