Mengoptimalkan aplikasi Node.js untuk Cloud Run

Panduan ini menjelaskan pengoptimalan untuk layanan Cloud Run yang ditulis dalam JavaScript atau TypeScript, yang berjalan di runtime Node.js. Informasi di halaman ini melengkapi tips pengembangan umum, yang juga berlaku untuk Node.js.

Mengoptimalkan waktu mulai

Dengan mengoptimalkan waktu startup, Anda dapat mengurangi latensi, meningkatkan responsivitas, dan mencapai pengoptimalan biaya yang efektif. Bagian ini menjelaskan berbagai cara untuk mengoptimalkan waktu mulai.

Mulai aplikasi Anda menggunakan node, bukan npm

Mulai aplikasi Anda secara langsung menggunakan node index.js, bukan npm start, karena npm menambahkan latensi ekstra.

Untuk memulai aplikasi dengan node index.js, ikuti salah satu metode berikut:

  • Gunakan CMD node index.js di Dockerfile Anda, misalnya:

    CMD node index.js
    
  • Tetapkan node index.js sebagai titik masuk Anda. Jalankan perintah berikut menggunakan Google Cloud CLI:

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

    Untuk mengetahui informasi dan opsi selengkapnya tentang cara mengonfigurasi titik entri, lihat Mengonfigurasi container untuk layanan.

Jika Anda menggunakan deployment sumber tanpa Dockerfile, Cloud Run akan melakukan pengoptimalan.

Menggabungkan kode

Bundler adalah alat build yang mengoptimalkan tata letak file sumber JavaScript Anda agar waktu pemuatan lebih cepat. Beberapa pengoptimalan bundler umum mencakup penghapusan kode yang tidak digunakan (tree shaking), pengecilan (minifikasi), dan penggabungan file kecil. Bundler secara signifikan mengurangi ukuran total bundle dan mengurangi jumlah permintaan pembacaan file. Bundler JavaScript umum adalah esbuild, webpack, dan rollup.

Memuat dependensi secara lambat

Saat startup, Cloud Run men-streaming setiap file yang dimuat kode Anda dari lokasi jarak jauh. Dibandingkan dengan sistem file lokal, penggunaan lokasi jarak jauh menyebabkan latensi tambahan setiap kali file dibaca. Paket Node.js dapat menggunakan banyak file dengan dependensi tidak langsung. Daripada mengimpor semua dependensi saat startup, sebaiknya Anda hanya memuat dependensi yang diperlukan agar server Anda dapat dimulai, dan memuat dependensi lainnya secara lambat dengan impor dinamis.

Misalnya, alih-alih menggunakan impor di bagian atas modul, seperti import { Storage } from '@google-cloud/storage', gunakan import() dalam fungsi saat memerlukan objek yang diimpor, misalnya:

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

Untuk mengidentifikasi modul yang dimuat selama startup dan waktu yang diperlukan setiap modul untuk dimuat di komputer Anda, jalankan perintah berikut:

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

Mengonfigurasi waktu tunggu

Server HTTP bawaan Node.js memiliki waktu tunggu default selama dua menit. Jika waktu tunggu permintaan layanan Cloud Run Anda lebih lama, ubah waktu tunggu menggunakan server.setTimeout(msecs). Anda juga harus mengubah waktu tunggu untuk framework yang dibangun di server Node.js, seperti Express. Untuk mencapai waktu tunggu tanpa batas di Node.js dan mengandalkan waktu tunggu bawaan Cloud Run, gunakan server.setTimeout(0).