Skip to content
This repository was archived by the owner on Apr 17, 2023. It is now read-only.

Load Firebase asynchronously. #77

Merged
merged 1 commit into from
Aug 17, 2019
Merged

Load Firebase asynchronously. #77

merged 1 commit into from
Aug 17, 2019

Conversation

derat
Copy link
Owner

@derat derat commented Aug 17, 2019

Update src/firebase/index.ts to export getFirebase, getAuth,
getFirestore, getFunctions, and getFirebaseUI functions that
load the corresponding Firebase modules asynchronously. This
lets webpack create separate chunks for each piece of
Firebase, reducing the app entrypoint from 1.12 MiB to 593
KiB.

It also improves Lighthouse measurements for the login page
on a simulated 3G network with 4x CPU slowdown:

First Contentful Paint: 3.1s -> 2.4s
Time to Interactive: 3.5s -> 3.0s
First Meaningful Paint: 3.2s -> 2.4s
First CPU Idle: 3.3s -> 2.9s

I'd expected an improvement here, since the login page
doesn't depend on Firestore.

It's harder to tell if there's a benefit on the other pages.
They all require login, which means that "Clear Storage"
needs to be unchecked in Chrome's Dev Tools Audit tab, which
I think means that the cache is preserved, so download time
doesn't get measured. See
GoogleChrome/lighthouse#2599 for
more discussion of this. It stands to reason that there
would be less benefit there, though, since all of those
pages require both the auth and Firestore modules to be
loaded before they can do anything meaningful.

@derat derat requested a review from niniane August 17, 2019 17:20
Update src/firebase/index.ts to export getFirebase, getAuth,
getFirestore, getFunctions, and getFirebaseUI functions that
load the corresponding Firebase modules asynchronously. This
lets webpack create separate chunks for each piece of
Firebase, reducing the app entrypoint from 1.12 MiB to 593
KiB.

It also improves Lighthouse measurements for the login page
on a simulated 3G network with 4x CPU slowdown:

First Contentful Paint: 3.1s -> 2.4s
Time to Interactive:    3.5s -> 3.0s
First Meaningful Paint: 3.2s -> 2.4s
First CPU Idle:         3.3s -> 2.9s

I'd expected an improvement here, since the login page
doesn't depend on Firestore.

It's harder to tell if there's a benefit on the other pages.
They all require login, which means that "Clear Storage"
needs to be unchecked in Chrome's Dev Tools Audit tab, which
I think means that the cache is preserved, so download time
doesn't get measured. See
GoogleChrome/lighthouse#2599 for
more discussion of this. It stands to reason that there
would be less benefit there, though, since all of those
pages require both the auth and Firestore modules to be
loaded before they can do anything meaningful.
@derat derat merged commit 4561c4e into master Aug 17, 2019
@derat derat deleted the async branch August 17, 2019 23:51
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants