Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Tips dan Trik

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Dokumen ini menjelaskan praktik terbaik untuk mendesain, mengimplementasikan, menguji, dan men-deploy Cloud Functions.

Ketepatan

Bagian ini menjelaskan praktik terbaik umum untuk mendesain dan mengimplementasikan Cloud Functions.

Tulis fungsi idempoten

Fungsi Anda harus menghasilkan hasil yang sama meskipun dipanggil beberapa kali. Ini memungkinkan Anda mencoba kembali pemanggilan jika pemanggilan sebelumnya gagal di tengah-tengah kode Anda. Untuk informasi lebih lanjut, lihat mencoba kembali fungsi yang digerakkan peristiwa .

Jangan memulai aktivitas latar belakang

Aktivitas latar belakang adalah segala sesuatu yang terjadi setelah fungsi Anda dihentikan. Pemanggilan fungsi selesai setelah fungsi mengembalikan atau menandakan penyelesaian, seperti dengan memanggil argumen callback dalam fungsi yang digerakkan oleh peristiwa Node.js. Kode apa pun yang dijalankan setelah penghentian yang baik tidak dapat mengakses CPU dan tidak akan membuat kemajuan apa pun.

Selain itu, saat pemanggilan berikutnya dijalankan di lingkungan yang sama, aktivitas latar belakang Anda akan dilanjutkan, mengganggu pemanggilan baru. Ini dapat menyebabkan perilaku dan kesalahan tak terduga yang sulit didiagnosis. Mengakses jaringan setelah suatu fungsi berakhir biasanya menyebabkan koneksi diatur ulang (kode kesalahan ECONNRESET ).

Aktivitas latar belakang seringkali dapat dideteksi dalam log dari pemanggilan individual, dengan menemukan apa saja yang dicatat setelah baris yang menyatakan bahwa pemanggilan selesai. Aktivitas latar belakang terkadang dapat terkubur lebih dalam di dalam kode, terutama saat ada operasi asinkron seperti callback atau timer. Tinjau kode Anda untuk memastikan semua operasi asinkron selesai sebelum Anda menghentikan fungsi.

Selalu hapus file sementara

Penyimpanan disk lokal di direktori sementara adalah sistem file dalam memori. File yang Anda tulis menghabiskan memori yang tersedia untuk fungsi Anda, dan terkadang bertahan di antara pemanggilan. Gagal menghapus file-file ini secara eksplisit pada akhirnya dapat menyebabkan kesalahan kehabisan memori dan cold start berikutnya.

Anda dapat melihat memori yang digunakan oleh masing-masing fungsi dengan memilihnya di daftar fungsi di GCP Console dan memilih plot penggunaan Memori .

Jangan mencoba untuk menulis di luar direktori sementara, dan pastikan untuk menggunakan metode platform/OS-independen untuk membuat jalur file.

Anda dapat mengurangi kebutuhan memori saat memproses file yang lebih besar menggunakan pipeline. Misalnya, Anda dapat memproses file di Cloud Storage dengan membuat aliran baca, meneruskannya melalui proses berbasis aliran, dan menulis aliran keluaran langsung ke Cloud Storage.

Peralatan

Bagian ini memberikan panduan tentang cara menggunakan fitur untuk mengimplementasikan, menguji, dan berinteraksi dengan Cloud Functions.

Pembangunan lokal

Penyebaran fungsi membutuhkan sedikit waktu, sehingga seringkali lebih cepat untuk menguji kode fungsi Anda secara lokal.

Pengembang Firebase dapat menggunakan Firebase CLI Cloud Functions Emulator .

Gunakan Sendgrid untuk mengirim email

Cloud Functions tidak mengizinkan koneksi keluar pada port 25, sehingga Anda tidak dapat membuat koneksi yang tidak aman ke server SMTP. Cara yang disarankan untuk mengirim email adalah dengan menggunakan SendGrid . Anda dapat menemukan opsi lain untuk mengirim email di tutorial Mengirim Email dari Instance untuk Google Compute Engine.

Pertunjukan

Bagian ini menjelaskan praktik terbaik untuk mengoptimalkan kinerja.

Gunakan dependensi dengan bijak

Karena fungsi tidak memiliki kewarganegaraan, lingkungan eksekusi sering kali diinisialisasi dari awal (selama apa yang dikenal sebagai cold start ). Saat start dingin terjadi, konteks global fungsi dievaluasi.

Jika fungsi Anda mengimpor modul, waktu muat untuk modul tersebut dapat menambah latensi pemanggilan selama cold start. Anda dapat mengurangi latensi ini, serta waktu yang diperlukan untuk menerapkan fungsi Anda, dengan memuat dependensi dengan benar dan tidak memuat dependensi yang tidak digunakan fungsi Anda.

Gunakan variabel global untuk menggunakan kembali objek dalam pemanggilan selanjutnya

Tidak ada jaminan bahwa status Cloud Function akan dipertahankan untuk pemanggilan di masa mendatang. Namun, Cloud Functions sering kali mendaur ulang lingkungan eksekusi dari pemanggilan sebelumnya. Jika Anda mendeklarasikan variabel dalam lingkup global, nilainya dapat digunakan kembali dalam pemanggilan selanjutnya tanpa harus dihitung ulang.

Dengan cara ini Anda dapat meng-cache objek yang mungkin mahal untuk dibuat ulang pada setiap pemanggilan fungsi. Memindahkan objek tersebut dari badan fungsi ke lingkup global dapat menghasilkan peningkatan kinerja yang signifikan. Contoh berikut membuat objek berat hanya sekali per instance fungsi, dan membagikannya ke semua pemanggilan fungsi yang mencapai instance yang diberikan:

console.log('Global scope');
const perInstance = heavyComputation();
const functions = require('firebase-functions');

exports.function = functions.https.onRequest((req, res) => {
    console.log('Function invocation');
    const perFunction = lightweightComputation();

    res.send(`Per instance: ${perInstance}, per function: ${perFunction}`);
});

Sangat penting untuk meng-cache koneksi jaringan, referensi pustaka, dan objek klien API dalam lingkup global. Lihat Mengoptimalkan Jaringan untuk contoh.

Lakukan inisialisasi malas variabel global

Jika Anda menginisialisasi variabel dalam lingkup global, kode inisialisasi akan selalu dieksekusi melalui pemanggilan cold start, yang meningkatkan latensi fungsi Anda. Dalam kasus tertentu, ini menyebabkan waktu tunggu intermiten untuk layanan yang dipanggil jika tidak ditangani dengan tepat dalam blok try / catch . Jika beberapa objek tidak digunakan di semua jalur kode, pertimbangkan untuk menginisialisasinya sesuai permintaan:

const functions = require('firebase-functions');
let myCostlyVariable;

exports.function = functions.https.onRequest((req, res) => {
    doUsualWork();
    if(unlikelyCondition()){
        myCostlyVariable = myCostlyVariable || buildCostlyVariable();
    }
    res.status(200).send('OK');
});

Ini sangat penting jika Anda mendefinisikan beberapa fungsi dalam satu file, dan fungsi yang berbeda menggunakan variabel yang berbeda. Kecuali jika Anda menggunakan inisialisasi malas, Anda mungkin membuang sumber daya pada variabel yang diinisialisasi tetapi tidak pernah digunakan.

Kurangi cold start dengan mengatur jumlah minimum instance

Secara default, Cloud Functions menskalakan jumlah instance berdasarkan jumlah permintaan yang masuk. Anda dapat mengubah perilaku default ini dengan menetapkan jumlah minimum instance yang Cloud Functions harus tetap siap untuk melayani permintaan. Menetapkan jumlah minimum instans akan mengurangi cold start aplikasi Anda. Kami merekomendasikan pengaturan jumlah minimum instance jika aplikasi Anda sensitif terhadap latensi.

Lihat Mengontrol perilaku penskalaan untuk informasi selengkapnya tentang opsi runtime ini.

Sumber daya tambahan

Cari tahu lebih lanjut tentang pengoptimalan performa dalam video "Google Cloud Performance Atlas" Cloud Functions Cold Boot Time .