From fb762b2450e5d06205c508b5695ac474dcecc748 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 8 Feb 2022 16:02:38 -0700 Subject: [PATCH 1/5] Call commit() if available --- packages/firestore/src/local/simple_db.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/firestore/src/local/simple_db.ts b/packages/firestore/src/local/simple_db.ts index f03ac114dd5..e3244ef7a0f 100644 --- a/packages/firestore/src/local/simple_db.ts +++ b/packages/firestore/src/local/simple_db.ts @@ -121,6 +121,15 @@ export class SimpleDbTransaction { } } + maybeCommit(): void { + // If the browser supports V3 indexedDb, invoke commit() explicitly to + // speed up index DB processing if the event loop remains blocks. + const maybeV3IndexedDb = this.transaction as any; + if (typeof maybeV3IndexedDb.commit === 'function') { + maybeV3IndexedDb.commit(); + } + } + /** * Returns a SimpleDbStore for the specified store. All * operations performed on the SimpleDbStore happen within the context of this @@ -400,6 +409,10 @@ export class SimpleDb { objectStores ); const transactionFnResult = transactionFn(transaction) + .next(result => { + transaction.maybeCommit(); + return result; + }) .catch(error => { // Abort the transaction if there was an error. transaction.abort(error); From 2cfd4a3f27f764add8e1a996e17205c2e52996e9 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 8 Feb 2022 16:05:14 -0700 Subject: [PATCH 2/5] Create green-parents-compare.md --- .changeset/green-parents-compare.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/green-parents-compare.md diff --git a/.changeset/green-parents-compare.md b/.changeset/green-parents-compare.md new file mode 100644 index 00000000000..42fda7dada3 --- /dev/null +++ b/.changeset/green-parents-compare.md @@ -0,0 +1,5 @@ +--- +"@firebase/firestore": patch +--- + +On browsers that support IndexedDB V3, we now invoke `transaction.commit()` to speed up data processing. From d66f0f35bbfc615dd189cc46a5605716c76bccb5 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 8 Feb 2022 16:06:03 -0700 Subject: [PATCH 3/5] Comment --- packages/firestore/src/local/simple_db.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firestore/src/local/simple_db.ts b/packages/firestore/src/local/simple_db.ts index e3244ef7a0f..1e21b2ae78b 100644 --- a/packages/firestore/src/local/simple_db.ts +++ b/packages/firestore/src/local/simple_db.ts @@ -122,7 +122,7 @@ export class SimpleDbTransaction { } maybeCommit(): void { - // If the browser supports V3 indexedDb, invoke commit() explicitly to + // If the browser supports V3 IndexedDB, we invoke commit() explicitly to // speed up index DB processing if the event loop remains blocks. const maybeV3IndexedDb = this.transaction as any; if (typeof maybeV3IndexedDb.commit === 'function') { From 4fb03425f16ae637120c02e9e9083be500b4fdb7 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Wed, 9 Feb 2022 10:17:16 -0700 Subject: [PATCH 4/5] Lint --- packages/firestore/src/local/simple_db.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/firestore/src/local/simple_db.ts b/packages/firestore/src/local/simple_db.ts index 1e21b2ae78b..4158f4e09e3 100644 --- a/packages/firestore/src/local/simple_db.ts +++ b/packages/firestore/src/local/simple_db.ts @@ -124,6 +124,7 @@ export class SimpleDbTransaction { maybeCommit(): void { // If the browser supports V3 IndexedDB, we invoke commit() explicitly to // speed up index DB processing if the event loop remains blocks. + // eslint-disable-next-line @typescript-eslint/no-explicit-any const maybeV3IndexedDb = this.transaction as any; if (typeof maybeV3IndexedDb.commit === 'function') { maybeV3IndexedDb.commit(); From 42ea106caea6d710cd7fc35f8adc5d905c29342d Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Wed, 9 Feb 2022 11:16:45 -0700 Subject: [PATCH 5/5] Don't commit when aborted --- packages/firestore/src/local/simple_db.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firestore/src/local/simple_db.ts b/packages/firestore/src/local/simple_db.ts index 4158f4e09e3..e7120f57123 100644 --- a/packages/firestore/src/local/simple_db.ts +++ b/packages/firestore/src/local/simple_db.ts @@ -126,7 +126,7 @@ export class SimpleDbTransaction { // speed up index DB processing if the event loop remains blocks. // eslint-disable-next-line @typescript-eslint/no-explicit-any const maybeV3IndexedDb = this.transaction as any; - if (typeof maybeV3IndexedDb.commit === 'function') { + if (!this.aborted && typeof maybeV3IndexedDb.commit === 'function') { maybeV3IndexedDb.commit(); } }