Skip to content

Lazy Firestore initialization using Firebase admin is extremely slow in Firebase function compared to direct Firestore object init #1107

@hakimio

Description

@hakimio

Lazy initialization of Firestore using the code below results in cold start of ~5 seconds (256MB function):

import * as firebase from 'firebase-admin';
import {Firestore} from '@google-cloud/firestore';

const getApp = (): firebase.app.App => {
    if (!firebase.apps?.length) {
        firebase.initializeApp();
    }

    return firebase.apps[0];
};

let database: Firestore;

const getDatabase = (): Firestore => {
    if (!datatabase) {
        database = getApp().firestore();
    }

    return database;
};

While the following code only takes ~2 seconds (256MB function cold start):

import {Firestore} from '@google-cloud/firestore';

let database: Firestore;

const getDatabase = (): Firestore => {
    if (!datatabase) {
        database = new Firestore();
    }

    return database;
};

Is it because of firebase admin package size or initializeApp() doing some heavy lifting?

Environment

  • Firebase SDK version: 8.1.1
  • Firebase Product: function, firestore, firebase admin
  • Node.js version: 12
  • "firebase": "8.1.1",
    "firebase-admin": "9.4.1",
    "firebase-functions": "3.12.0",
    "firebase-tools": "^8.16.2"
    "@google-cloud/firestore": "4.7.1"

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions