Gradle 提供多種方式來檢查您的建置
-
使用建置掃描進行剖析
-
本機剖析報告
-
低層級剖析
什麼是建置掃描?
建置掃描是執行建置時所發生事件的持續性、可共用記錄。建置掃描提供建置的深入資訊,您可以使用這些資訊來找出效能瓶頸並加以修正。
在 Gradle 4.3 以上版本中,您可以使用 --scan
命令列選項來建立建置掃描
$ gradle build --scan
對於較舊的 Gradle 版本,建置掃描外掛程式使用者手冊說明如何啟用建置掃描。
在建置結束時,Gradle 會顯示一個 URL,您可以在其中找到建置掃描
BUILD SUCCESSFUL in 2s 4 actionable tasks: 4 executed Publishing build scan... https://gradle.com/s/e6ircx2wjbf7e
本節說明如何使用建置掃描來剖析您的建置。
使用建置掃描進行剖析
效能頁面可以協助使用建置掃描來剖析建置。若要前往該頁面,請按一下左側導覽功能表中的「效能」,或按一下建置掃描首頁上的「探索效能」連結

效能頁面顯示完成建置不同階段所花費的時間。此頁面顯示完成下列動作所花費的時間
-
啟動
-
設定建置專案
-
解析相依性
-
執行任務
您還可以取得環境屬性的詳細資料,例如是否已使用守護程式。

在上述建置掃描中,組態花費超過 13 秒。按一下「組態」標籤,將此階段分解為組成部分,找出緩慢的原因。

在這裡,您可以看到套用至專案的腳本和外掛,依據套用時間長度遞減排列。最慢的外掛和腳本套用是最佳的最佳化候選。例如,腳本 script-b.gradle
套用一次,但花費 3 秒。展開該列,查看建置套用此腳本的位置。

您可以看到子專案 :app1
從該子專案的 build.gradle
檔案中套用腳本一次。
剖析報告
如果您不喜歡使用建置掃描,您可以在根專案的 build/reports/profile
目錄中產生 HTML 報告。若要產生此報告,請使用 --profile
命令列選項
$ gradle --profile <tasks>
每個剖析報告的名稱中都有時間戳記,以避免覆寫現有的報告。
報告會顯示執行建置所需時間的細目。不過,此細目並不像建置掃描那麼詳細。下列剖析報告顯示可用的不同類別

低階剖析
有時,即使您的建置腳本一切都做對了,您的建置還是會很慢。這通常是因為外掛和自訂任務效率不彰,或是資源受限。使用 Gradle Profiler 找出此類瓶頸。使用 Gradle Profiler,您可以定義場景,例如「在進行 ABI 中斷變更後執行『組裝』」,並執行您的建置多次以收集剖析資料。使用 Profiler 產生建置掃描。或將其與 JProfiler 和 YourKit 等方法剖析器結合。這些剖析器可以協助您找出自訂外掛中效率不彰的演算法。如果您發現 Gradle 本身中的某些項目會讓您的建置變慢,請毫不猶豫地將剖析器快照傳送至 performance@gradle.com。
效能類別
建置掃描和本機設定檔報告會將建置執行細分為相同的類別。下列各節說明這些類別。
啟動
這反映了 Gradle 的初始化時間,其中大部分包括
-
JVM 初始化和類別載入
-
如果您使用 wrapper 下載 Gradle 發行版
-
如果尚未執行合適的守護程式,則啟動守護程式
-
執行 Gradle 初始化指令碼
即使建置執行的啟動時間很長,後續執行通常會看到啟動時間大幅下降。持續緩慢的建置啟動時間通常是 init 指令碼中問題的結果。仔細檢查您在那裡執行的作業是否必要且效能良好。
設定和buildSrc
在啟動後,Gradle 會初始化您的專案。通常,Gradle 只會處理您的設定檔。如果您在 buildSrc
目錄中自訂建置邏輯,Gradle 也會處理該邏輯。在建置 buildSrc
一次後,Gradle 會認為它是最新的。最新檢查所需時間遠少於邏輯處理。如果您的 buildSrc
階段花費太多時間,請考慮將其分拆成一個獨立專案。然後您可以將該專案的 JAR 人工製品新增為相依性。
設定檔很少包含具有大量 I/O 或運算的程式碼。如果您發現 Gradle 處理它需要很長的時間,請使用更傳統的設定檔方法,例如 Gradle Profiler,以找出原因。
載入專案
載入專案通常不需要花費大量時間,您也無法控制它。在此花費的時間基本上是建置中專案數量的函式。