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)
.