使用任何建置快取的唯一理由是為了加快建置速度。但是,使用快取後,速度能提升多少呢?衡量其影響既重要又複雜,因為快取效能取決於許多因素。執行快取影響的測量可以驗證開始使用快取所需的額外努力(工作、基礎架構)。這些測量結果稍後可以作為未來改進的基準,並監控效能衰退的跡象。
適當的建置配置和維護可以大幅提升快取效能。 |
完全快取的建置
要感受快取能為您做些什麼,最直接的方式是測量非快取建置和完全快取建置之間的差異。這將讓您了解使用快取後建置速度能達到的理論上限,前提是您嘗試建置的所有內容都已建置完成。最簡單的測量方法是使用本機快取
-
清除快取目錄以避免先前建置的任何命中 (
rm -rf $GRADLE_USER_HOME/caches/build-cache-*
) -
執行建置 (例如
./gradlew --build-cache clean assemble
),以便將所有可快取任務的結果儲存在快取中。 -
再次執行建置 (例如
./gradlew --build-cache clean assemble
);根據您的建置,您應該會看到許多任務從快取中擷取。 -
比較兩個建置的執行時間
即使在兩個建置中的第一個建置中,您也可能會遇到一些快取任務,儘管不應該有先前快取的結果。如果您在建置中有任務配置為從相同的輸入產生相同的結果,則可能會發生這種情況;在這種情況下,一旦其中一個任務完成,Gradle 將簡單地為其餘任務重複使用其輸出。 |
通常,您的完全快取建置應該比 clean
建置快得多:這是使用建置快取在您的特定建置中可以節省時間的理論上限。您通常不會在第一次嘗試就獲得可實現的效能提升,請參閱 尋找任務輸出快取的問題。隨著您的建置邏輯不斷發展和變化,確保快取效能不會衰退也很重要。建置掃描提供詳細的效能分析,向您展示您的建置使用建置快取的效率。

完全快取的建置發生在開發人員從版本控制系統中取出最新版本然後進行建置的情況下,例如為了產生 IDE 中所需的最新原始碼。然而,執行大多數建置的目的是處理一些新的變更。正在建置的軟體結構(有多少模組、其各部分之間的獨立性等)以及變更本身的性質(「系統核心的大型重構」與「單元測試的小變更」等)強烈影響建置快取帶來的效能提升。由於開發人員傾向於隨著時間的推移提交不同種類的變更,因此預期快取效能會隨著每次變更而變化。與任何快取一樣,因此應隨著時間的推移來衡量其影響。
在團隊使用共享快取後端的設置中,有兩個值得測量快取影響的位置:CI 和開發人員機器上。
快取對 CI 建置的影響
了解快取對 CI 影響的最佳方法是設定啟用和停用快取的相同建置,並隨著時間的推移比較結果。如果您只有一個想要啟用快取的 Gradle 建置步驟,則可以使用 CI 系統的內建統計工具輕鬆比較結果。
測量複雜的管線可能需要更多工作或外部工具來收集和處理測量結果。重要的是要區分管線中快取沒有影響的部分,例如,建置在 CI 系統佇列中等待的時間,或從版本控制系統中取出原始碼所花費的時間。
當使用 Develocity 時,您可以使用 Export API 來存取必要的資料並執行分析。與從 CI 伺服器獲得的資料相比,Develocity 提供更豐富的資料。例如,您可以深入了解單個任務的執行情況、從快取中擷取了多少個任務、從快取下載所需的時間、用於計算快取金鑰的屬性等等。當使用 CI 伺服器的內建功能時,如果您使用 Teamcity 進行 CI 建置,則可以使用 統計圖表。大多數時候,您最終將通過相應的 REST API 從 CI 伺服器提取資料(請參閱 Jenkins remote access API 和 Teamcity REST API)。
通常,超過一定規模的 CI 建置包含並行區段以利用多個代理程式。使用並行管線,您可以測量一組變更從推送到版本控制系統到建置、驗證和部署所花費的實際時間。在這種情況下,建置快取的效果可以通過減少開發人員等待 CI 回饋的時間來衡量。
您還可以測量建置代理程式花費在建置變更集上的累計時間,這將讓您了解 CI 基礎架構必須付出的工作量。快取在這裡的效果是減少了 CI 資源的支出,因為您不需要那麼多 CI 代理程式來維護相同數量的已建置變更。
如果您想查看 Gradle 建置本身的測量結果,您可以查看部落格文章 「Introducing the build cache」。
測量開發人員建置
Gradle 的建置快取在降低 CI 基礎架構成本和回饋時間方面非常有用,但當開發人員可以在其本機建置中重複使用快取結果時,通常會產生最大的影響。由於多種原因,這也是最難量化的
-
開發人員執行不同的建置
-
開發人員可能擁有不同的硬體或不同的設定
-
開發人員在其機器上執行各種其他可能會減慢速度的事情
當使用 Develocity 時,您也可以使用 Export API 來提取有關開發人員建置的資料。然後,您可以建立每個開發人員或建置快取的任務數量的統計資訊。您甚至可以比較執行任務與從快取載入任務所花費的時間,然後估計每個開發人員節省的時間。
當使用 Develocity 建置快取後端 時,您應該密切注意管理 UI 中的命中率。命中率的上升可能表示開發人員更好地使用了快取

在建置掃描中分析效能
建置掃描通過「效能」頁面的「建置快取」部分提供建置的所有快取操作摘要。

此頁面詳細說明了哪些任務能夠通過快取命中避免,以及哪些錯失。它還分別指出本機和遠端快取的命中和錯失。對於遠端快取操作,給出了將產出物傳輸到快取和從快取傳輸產出物所花費的時間,以及傳輸速率。這對於評估網路鏈路品質對效能的影響尤為重要,因為傳輸時間會影響建置時間。
遠端快取效能
改善建置和遠端快取之間的網路鏈路可以顯著提高建置快取效能。如何做到這一點取決於使用的遠端快取和您的網路環境。
Develocity 提供的多節點遠端建置快取是一個快速、高效、專為目的而建的遠端建置快取。特別是,如果您的開發團隊在地理位置上分散,其複製功能可以通過允許開發人員使用他們具有良好網路鏈路的快取來顯著提高效能。有關更多資訊,請參閱 《Develocity 管理手冊》的「建置快取複製」章節。