針對 Cloud Run 最佳化 Node.js 應用程式

本指南說明如何最佳化以 JavaScript 或 TypeScript 編寫的 Cloud Run 服務,這些服務會在 Node.js 執行階段執行。本頁資訊是一般開發訣竅的補充說明,同樣適用於 Node.js。

縮短啟動時間

最佳化啟動時間可減少延遲、提升回應速度,並有效節省成本。本節說明幾種縮短啟動時間的方法。

使用 node 啟動應用程式,而非 npm

請使用 node index.js 直接啟動應用程式,不要使用 npm start, 因為 npm 會增加額外延遲。

如要使用 node index.js 啟動應用程式,請採用下列任一方法:

  • 在 Dockerfile 中使用 CMD node index.js,例如:

    CMD node index.js
    
  • node index.js 設為進入點。使用 Google Cloud CLI 執行下列指令:

    gcloud run deploy SERVICE --command "node index.js"
    

    如要進一步瞭解如何設定進入點,請參閱「為服務設定容器」。

如果您使用沒有 Dockerfile 的來源部署作業,Cloud Run 會執行最佳化作業。

將程式碼打包

打包工具是一種建構工具,可最佳化 JavaScript 來源檔案的版面配置,縮短載入時間。常見的打包工具最佳化包括樹狀結構修剪、縮小和合併小型檔案。打包工具可大幅縮減套件總大小,並減少檔案讀取要求數量。常見的 JavaScript 整合工具包括 esbuildwebpackrollup

延遲載入依附元件

啟動時,Cloud Run 會串流處理程式碼從遠端位置載入的每個檔案。相較於本機檔案系統,使用遠端位置時,每次讀取檔案都會產生額外延遲。Node.js 套件可能會使用許多具有間接依附元件的檔案。建議您只載入伺服器啟動時所需的依附元件,並使用動態匯入延遲載入其他依附元件,而非在啟動時匯入所有依附元件。

舉例來說,請在函式中使用 import(),而非在模組頂端使用匯入功能,例如 import { Storage } from '@google-cloud/storage',如下所示:

const { Storage } = await import('@google-cloud/storage');

如要找出啟動期間載入的模組,以及每個模組在電腦上載入所花費的時間,請執行下列指令:

node --trace-event-categories node.module_timer --trace-event-file-pattern 'trace-events.log' index.js

設定逾時

Node.js 內建 HTTP 伺服器的預設逾時時間為兩分鐘。如果 Cloud Run 服務的要求逾時時間較長,請使用 server.setTimeout(msecs) 修改逾時時間。您也必須修改以 Node.js 伺服器為基礎的架構 (例如 Express) 的逾時設定。如要在 Node.js 中達成無限逾時,並依賴 Cloud Run 的內建逾時,請使用 server.setTimeout(0)