Где я должен объявить новый экземпляр базы данных Firebase? - PullRequest
1 голос
/ 25 апреля 2020

При использовании const db = firebase.database(), имеет ли значение, где я объявляю это в скрипте облачной функции?

Например, index.ts, который содержит все мои облачные функции, должен ли я объявить это сверху или в каждой отдельной функции?

const db = firebase.database()
export const functionA = functions.https.onCall(async (data, context) => {
   // use db here
});
export const functionB = functions.https.onCall(async (data, context) => {
   // use db here
});

ИЛИ

export const functionA = functions.https.onCall(async (data, context) => {
    const db = firebase.database()
});
export const functionB = functions.https.onCall(async (data, context) => {
    const db = firebase.database()
});

Или это не имеет значения?

Ответы [ 2 ]

3 голосов
/ 25 апреля 2020

Первый подход создает экземпляр db, когда код загружает .

. Второй подход создает экземпляр db, когда код выполняет .

Ни один из них не лучше, чем другой, и операция firebase.database() очень легкая, поэтому на практике она вряд ли что-то изменит.

То, что делает , делает разницу загружаете ли вы базу данных SDK для начала. Некоторые из SDK в Firebase довольно большие, и не каждая облачная функция нуждается во всех SDK. Таким образом, обычная уловка для ускорения времени загрузки / холодного запуска состоит в том, чтобы переместить операторы require('firebase-...') в тело облачных функций, которые в них нуждаются.

2 голосов
/ 25 апреля 2020

Обычно, если вы хотите взаимодействовать из облачной функции с базой данных реального времени, вам просто нужно инициализировать Admin SDK и получить службу базы данных для приложения по умолчанию (или данного приложения), как объяснено здесь в do c.

Таким образом, вы бы сделали что-то вроде:

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

admin.initializeApp();
// Get the Database service for the default app
const db = admin.database();

Чтобы получить более подробную информацию о том, что Фрэнк объясняет о Cold Start в своем ответе, вам следует прочитать следующую статью: https://medium.com/firebase-developers/organize-cloud-functions-for-max-cold-start-performance-and-readability-with-typescript-and-9261ee8450f0

Однако в вашем случае, поскольку ваши две облачные функции используют Admin SDK, не должно быть никакой разницы между двумя подходами, представленными в Ваш вопрос, как упомянул Фрэнк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...