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

Mengoptimalkan jaringan

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

Kesederhanaan Cloud Functions memungkinkan Anda mengembangkan kode dengan cepat dan menjalankannya di lingkungan tanpa server. Pada skala sedang, biaya menjalankan fungsi rendah, dan mengoptimalkan kode Anda mungkin bukan prioritas utama. Namun, saat penyebaran Anda meningkat, mengoptimalkan kode Anda menjadi semakin penting.

Dokumen ini menjelaskan cara mengoptimalkan jaringan untuk fungsi Anda. Beberapa manfaat optimalisasi jaringan adalah sebagai berikut:

  • Kurangi waktu CPU yang dihabiskan dalam membuat koneksi baru di setiap panggilan fungsi.
  • Mengurangi kemungkinan kehabisan koneksi atau kuota DNS.

Mempertahankan Koneksi yang Persistent

Bagian ini memberikan contoh bagaimana mempertahankan koneksi persisten dalam suatu fungsi. Kegagalan untuk melakukannya dapat mengakibatkan kuota koneksi cepat habis.

Skenario berikut dicakup dalam bagian ini:

  • HTTP/S
  • API Google

Permintaan HTTP/S

Cuplikan kode yang dioptimalkan di bawah ini menunjukkan cara mempertahankan koneksi tetap alih-alih membuat koneksi baru pada setiap pemanggilan fungsi:

const http = require('http');
const functions = require('firebase-functions');

// Setting the `keepAlive` option to `true` keeps
// connections open between function invocations
const agent = new http.Agent({keepAlive: true});

exports.function = functions.https.onRequest((request, response) => {
    req = http.request({
        host: '',
        port: 80,
        path: '',
        method: 'GET',
        agent: agent, // Holds the connection open after the first invocation
    }, res => {
        let rawData = '';
        res.setEncoding('utf8');
        res.on('data', chunk => { rawData += chunk; });
        res.on('end', () => {
            response.status(200).send(`Data: ${rawData}`);
        });
    });
    req.on('error', e => {
        response.status(500).send(`Error: ${e.message}`);
    });
    req.end();
});

Mengakses Google API

Contoh di bawah menggunakan Cloud Pub/Sub , tetapi pendekatan ini juga berfungsi untuk pustaka klien lain—misalnya, Cloud Natural Language atau Cloud Spanner . Perhatikan bahwa peningkatan kinerja mungkin bergantung pada implementasi pustaka klien tertentu saat ini.

Membuat objek klien PubSub menghasilkan satu koneksi dan dua kueri DNS per pemanggilan. Untuk menghindari koneksi yang tidak perlu dan kueri DNS, buat objek klien PubSub dalam lingkup global seperti yang ditunjukkan pada contoh di bawah ini:

const PubSub = require('@google-cloud/pubsub');
const functions = require('firebase-functions');
const pubsub = PubSub();

exports.function = functions.https.onRequest((req, res) => {
    const topic = pubsub.topic('');

    topic.publish('Test message', err => {
        if (err) {
            res.status(500).send(`Error publishing the message: ${err}`);
        } else {
            res.status(200).send('1 message published');
        }
    });
});

Uji Beban Fungsi Anda

Untuk mengukur berapa banyak koneksi rata-rata yang dilakukan fungsi Anda, cukup terapkan sebagai fungsi HTTP dan gunakan kerangka kerja pengujian kinerja untuk menjalankannya di QPS tertentu. Salah satu pilihan yang memungkinkan adalah Artileri , yang dapat Anda aktifkan dengan satu baris:

$ artillery quick -d 300 -r 30 URL

Perintah ini mengambil URL yang diberikan pada 30 QPS selama 300 detik.

Setelah melakukan pengujian, periksa penggunaan kuota koneksi Anda di halaman kuota Cloud Functions API di Cloud Console. Jika penggunaannya secara konsisten sekitar 30 (atau kelipatannya), Anda membuat satu (atau beberapa) koneksi di setiap pemanggilan. Setelah mengoptimalkan kode, Anda akan melihat beberapa (10-30) koneksi hanya terjadi di awal pengujian.

Anda juga dapat membandingkan biaya CPU sebelum dan sesudah pengoptimalan plot kuota CPU di halaman yang sama.