У меня есть функция firebase, которая берет маркер аутентификации firebase и создает документ для хранения пользовательских настроек, если в моей коллекции firestore такого документа нет для данного пользователя.
Функция работает без проблем, но я заметил, что для ее завершения требуется около десяти секунд.
Используя ведение стека и некоторые записи журнала, я смог сузить его до одной строки, которую я считаю виновной:
const userDoc = await admin.firestore().doc('users/' + uid).get();
Для контекста у меня есть фильтр, который декодируеттокен аутентификации и сохраняет его в переменной запроса.Сама конечная точка запроса выглядит примерно так:
app.post('/register', (async (req, res) => {
console.log('New request to register user.');
const uid = req['user'].uid;
const userDoc = await admin.firestore().doc('users/' + uid).get();
if (!userDoc.exists) {
console.log('User does not exist. Creating.');
// Do stuff here
}
}));
Вывод журнала, который я получаю на стекдрайвере, выглядит следующим образом:
Как видите, между первым и вторым оператором журнала задержка составляет примерно 8 секунд.Единственная заметная вещь, которую я вижу здесь, это запрос документа.У меня есть несколько других звонков в firestore после этого, они не показывают такого рода задержки.
У меня есть две теории об этом поведении:
Так как этоПервый запрос к firestore, который я делаю в этом запросе (фильтры включены), возможно, потребуется сначала инициализировать firestore.Лично я нахожу это маловероятным, видя, как эффективный пожарный магазин повсюду.
Во-вторых, и, более вероятно, документ, прочитанный на несуществующем документе, может занять некоторое время длятехнические причины?В этом случае, было бы более эффективным сохранить uid
как поле документа и создать правильный запрос к коллекции users
?
Я, конечно, мог бы бытьсовершенно неправильно или я что-то забыл.Буду благодарен за любые подсказки по этому поводу.