Документы Firebase рекомендуют разумно управлять зависимостями в качестве одного из первых способов уменьшить время холодного запуска: https://firebase.google.com/docs/functions/tips#use_dependencies_wisely
Для большинства функций Firebase вы, вероятно, будете использовать модули firebase-functions
и firebase-admin
.
Вот практический пример функции:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
// Initialize the app in admin sdk
admin.initializeApp();
// Firestore timestamp support
admin.firestore().settings({timestampsInSnapshots: true});
exports.simpleFunction = functions.https.onCall((data, context) => {
return admin.auth().getUserByEmail(data.email)
.catch(() => {
return Promise.reject(new https.HttpsError('not-found', 'User not found.'));
})
.then(userRecord => {
return admin.firestore().collection('user').doc(userRecord.uid).get();
})
});
Время выполнения холодного запуска: Function execution took 7517 ms, finished with status code: 200
Время теплого исполнения: Function execution took 8 ms, finished with status code: 200
Тест этой функции, как показано, имеет время загрузки при холодном пуске ~ 7,5 секунд (хотя и замечательное время отклика теплого запуска). Хотя существует множество факторов, объясняющих, почему это может иметь место, одной из причин может быть загрузка всех зависимостей, требуемых firebase-functions
и firebase-admin
.
Учитывая, что пример функции использует только несколько методов в каждом пакете, возможно ли каким-то образом только загрузить эти методы и их зависимости, чтобы уменьшить время загрузки?
Я также пытался использовать машинопись и методы импорта напрямую в виде import {https} from 'firebase-functions'
и import {initializeApp, firestore, auth} from 'firebase-admin'
, надеясь, что какой-то магический закулисный тряски деревьев, но оказывается, что машинопись в конце концов переносится в javascript .