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 merancang dan mengimplementasikan Cloud Functions.

Tulis fungsi idempoten

Fungsi Anda harus menghasilkan hasil yang sama meskipun dipanggil beberapa kali. Ini memungkinkan Anda mencoba lagi permintaan jika permintaan sebelumnya gagal di tengah jalan melalui kode Anda. Untuk informasi selengkapnya, lihat mencoba kembali fungsi yang digerakkan oleh peristiwa .

Jangan memulai aktivitas latar belakang

Aktivitas latar belakang adalah segala sesuatu yang terjadi setelah fungsi Anda dihentikan. Pemanggilan fungsi selesai setelah fungsi kembali atau menandakan penyelesaian, seperti dengan memanggil argumen callback dalam fungsi yang digerakkan oleh peristiwa Node.js. Kode apa pun yang dijalankan setelah penghentian yang anggun 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. Hal ini dapat menyebabkan perilaku tak terduga dan kesalahan yang sulit didiagnosis. Mengakses jaringan setelah suatu fungsi berakhir biasanya menyebabkan koneksi disetel ulang (kode kesalahan ECONNRESET ).

Aktivitas latar belakang sering kali dapat dideteksi dalam log dari pemanggilan individu, dengan menemukan apa pun yang dicatat setelah baris yang mengatakan 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 menggunakan 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 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 pipelining. Misalnya, Anda dapat memproses file di Cloud Storage dengan membuat aliran baca, meneruskannya melalui proses berbasis aliran, dan menulis aliran output langsung ke Cloud Storage.

Peralatan

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

Pembangunan lokal

Penerapan 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 fungsinya adalah stateless, 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 di masa mendatang

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 berikutnya tanpa harus dihitung ulang.

Dengan cara ini Anda dapat men-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 men-cache koneksi jaringan, referensi pustaka, dan objek klien API dalam lingkup global. Lihat Mengoptimalkan Jaringan untuk contoh.

Lakukan inisialisasi variabel global yang malas

Jika Anda menginisialisasi variabel dalam lingkup global, kode inisialisasi akan selalu dijalankan melalui pemanggilan cold start, meningkatkan latensi fungsi Anda. Dalam kasus tertentu, ini menyebabkan waktu tunggu intermiten untuk layanan yang dipanggil jika tidak ditangani dengan tepat di blok try / catch . Jika beberapa objek tidak digunakan di semua jalur kode, pertimbangkan untuk menginisialisasinya dengan malas 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 dapat membuang sumber daya pada variabel yang diinisialisasi tetapi tidak pernah digunakan.

Kurangi cold start dengan menyetel jumlah minimum instans

Secara default, Cloud Functions menskalakan jumlah instans berdasarkan jumlah permintaan yang masuk. Anda dapat mengubah perilaku default ini dengan menyetel jumlah minimum instans yang harus disimpan Cloud Functions untuk melayani permintaan. Menyetel jumlah minimum instans akan mengurangi cold start aplikasi Anda. Kami merekomendasikan untuk menyetel jumlah minimum instans jika aplikasi Anda peka terhadap latensi.

Lihat Mengontrol perilaku penskalaan untuk informasi selengkapnya tentang opsi waktu proses ini.

Sumber daya tambahan

Cari tahu lebih lanjut tentang mengoptimalkan kinerja di video "Google Cloud Performance Atlas" Waktu Booting Dingin Cloud Functions .