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 startup
Dengan mengoptimalkan waktu startup, Anda dapat mengurangi latensi, meningkatkan responsivitas, dan mencapai pengoptimalan biaya yang efektif. Bagian ini menjelaskan berbagai cara untuk mengoptimalkan waktu startup.
Memulai aplikasi menggunakan node, bukan npm
Mulai aplikasi Anda secara langsung menggunakan node index.js, bukan npm start,
karena npm menambahkan latensi tambahan.
Untuk memulai aplikasi Anda dengan node index.js, ikuti salah satu metode berikut:
Gunakan
CMD node index.jsdi Dockerfile Anda, misalnya:CMD node index.jsTetapkan
node index.jssebagai titik entri 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.
Memaketkan kode
Bundler adalah alat build yang mengoptimalkan tata letak file sumber JavaScript Anda untuk waktu pemuatan yang lebih cepat. Beberapa pengoptimalan bundler umum mencakup tree shaking, minifikasi, dan penggabungan file kecil. Bundler secara signifikan mengurangi ukuran total paket dan mengurangi jumlah permintaan baca file. Bundler JavaScript umum adalah esbuild, webpack, dan rollup.
Memuat dependensi secara lambat
Saat startup, Cloud Run melakukan streaming setiap file yang dimuat kode Anda dari lokasi jarak jauh. Dibandingkan dengan sistem file lokal, penggunaan lokasi jarak jauh akan menyebabkan latensi tambahan setiap kali file dibaca. Paket Node.js mungkin 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, daripada menggunakan impor di bagian atas modul Anda, 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 mesin Anda, jalankan perintah berikut:
node --trace-event-categories node.module_timer --trace-event-file-pattern 'trace-events.log' index.js
Mengonfigurasi waktu tunggu
Di Node.js versi 14 dan yang lebih baru, server HTTP bawaan memiliki waktu tunggu default
0 (tanpa waktu tunggu). Di Node.js versi sebelum 14, waktu tunggu default adalah 2 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 dibuat 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).