什麼是建構掃描?
建構掃描 是在執行建構時發生的事件的持久、可共享記錄。建構掃描提供對建構的深入見解,您可以使用這些見解來識別和修正效能瓶頸。
在 Gradle 4.3 及更高版本中,您可以使用 --scan
命令列選項建立建構掃描
$ gradle build --scan
對於舊版本的 Gradle,Build Scan 外掛程式使用者手冊 說明如何啟用建構掃描。
在建構結束時,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 破壞性變更後執行 'assemble'」之類的場景,並多次執行建構以收集分析資料。使用 Profiler 來產生建構掃描。或者將其與方法分析器(如 JProfiler 和 YourKit)結合使用。這些分析器可以幫助您在外掛程式中找到效率低下的演算法。如果您發現 Gradle 本身中的某些內容會減慢您的建構速度,請隨時將分析器快照傳送至 performance@gradle.com。
效能類別
建構掃描和本機分析報告都將建構執行分解為相同的類別。以下章節說明這些類別。
啟動
這反映了 Gradle 的初始化時間,主要包括:
-
JVM 初始化和類別載入
-
如果您正在使用 Wrapper,則下載 Gradle 發行版
-
如果沒有合適的守護進程正在執行,則啟動守護進程
-
執行 Gradle 初始化腳本
即使建構執行具有較長的啟動時間,後續執行通常也會看到啟動時間大幅下降。持續緩慢的建構啟動時間通常是 init 腳本中問題的結果。仔細檢查您在那裡所做的工作是否必要且高效能。
設定和 buildSrc
啟動後,Gradle 會初始化您的專案。通常,Gradle 只會處理您的設定檔。如果您在 buildSrc
目錄中有自訂建構邏輯,Gradle 也會處理該邏輯。在建構 buildSrc
一次後,Gradle 會將其視為最新。最新檢查所花費的時間遠少於邏輯處理。如果您的 buildSrc
階段花費太多時間,請考慮將其分解為單獨的專案。然後,您可以將該專案的 JAR Artifact 新增為相依性。
設定檔很少包含具有大量 I/O 或計算的程式碼。如果您發現 Gradle 花費很長時間來處理它,請使用更傳統的分析方法,例如 Gradle Profiler,來確定原因。
載入專案
載入專案通常不會花費大量時間,您也無法控制它。此處花費的時間基本上是您建構中專案數量的函數。