快取或不快取
在建立單一儲存庫時,您需要逐項任務決定是否能根據先前執行結果跳過該任務。此行為透過 pipeline.<task>.cache
內的 turbo.json
控制
{
"$schema": "https://turbo.dev.org.tw/schema.json",
"pipeline": {
"lint": {
"cache": true
}
}
}
Turborepo 預設為 "cache": true
,因此您不需要指定此值,表示這是相同的組態
{
"$schema": "https://turbo.dev.org.tw/schema.json",
"pipeline": {
"lint": {}
}
}
在這些範例中,我們已告知 Turborepo 快取 lint
任務。但是,由於我們只指定了 cache
金鑰,因此唯一快取的內容是終端機輸出。對於某些類型的任務,例如 lint
或 test
,這種最低限度的組態可能是正確的!
不過,對於大多數任務,您還需要指定 快取什麼,以及必須匹配才能使快取有效的 檔案 和 環境變數。
何時不快取
"cache": false
並不表示「總是執行!」而是表示「如果要執行此任務,則不會從快取中還原。」不要依賴 "cache": false
來觸發部署等副作用。
由於快取是預設行為,而且對大多數情況來說都是理想的,因此知道何時選擇退出該行為非常重要。
- 執行極快的任務。如果您打算使用遠端快取,而且任務可以在網路往返時間內執行完畢,例如 100 毫秒,則應考慮不要快取任務。
- 輸出資源龐大的任務。如果執行任務的結果是產生 Docker 容器,則建立快取成品、上傳和下載的時間可能會超過重新產生它的時間。
- 非轉換檔案系統作業。如果任務是「將一堆影像從一個目錄移到另一個目錄」,則任務可能需要一段時間,但本地執行此程序的過程永遠會比快取和還原已移動的資源快。
- 實作自己的應用程式行為感知快取的任務。有些任務有自己的內部快取行為,例如類似 Docker 的圖層快取。在大多數情況下,這些次要快取會與 Turborepo 攜手合作,但在某些情況下,該設定會變得極其複雜。
隨著您更熟悉 Turborepo,您會發現這些準則中的一些在不同環境中執行時會有意想不到的取捨。例如,持續整合服務上的磁碟讀取有時會比網路讀取慢得多。務必在您自己的專案中測試行為,以確定不快取是否提供效能優勢。