Offline persistence in Firebase - Time & Space Complexity
When using Firebase's offline persistence, we want to understand how the app's work changes as data grows.
We ask: How does syncing and storing data offline affect the number of operations?
Analyze the time complexity of enabling offline persistence and syncing data.
// Enable offline persistence
firebase.firestore().enablePersistence()
.catch((err) => {
if (err.code == 'failed-precondition') {
// Multiple tabs open, persistence can only be enabled
// in one tab at a time.
} else if (err.code == 'unimplemented') {
// The browser does not support all features required
}
});
// Listen for data changes
firebase.firestore().collection('items').onSnapshot(snapshot => {
// Update UI with local and server data
});
This code enables offline data storage and listens for updates to a collection.
Look at what happens repeatedly as data changes or syncs.
- Primary operation: Listening to data changes with
onSnapshotand syncing updates. - How many times: Once per data change or sync event, which depends on the number of documents and updates.
As the number of documents grows, the app processes more updates to keep offline data current.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | About 10 update events to sync and store |
| 100 | About 100 update events, more data to sync |
| 1000 | About 1000 update events, syncing takes longer |
Pattern observation: The number of sync operations grows roughly in direct proportion to the number of documents.
Time Complexity: O(n)
This means the work to sync and update offline data grows linearly with the number of documents.
[X] Wrong: "Offline persistence makes all data instantly available with no extra syncing work."
[OK] Correct: Offline persistence stores data locally but still needs to sync changes, so work grows with data size.
Understanding how offline data syncing scales shows you can design apps that work smoothly even with lots of data.
"What if we changed from listening to the whole collection to listening only to a filtered subset? How would the time complexity change?"