From 534dfb0ca2e1640fa24a8cf2893b23aaf3e3199b Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Fri, 19 Apr 2019 01:13:25 +0100 Subject: [PATCH] Optimize: don't recreate ID arrays all the time --- src/devtools/store.js | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/devtools/store.js b/src/devtools/store.js index 814f6799de..f7def61a7b 100644 --- a/src/devtools/store.js +++ b/src/devtools/store.js @@ -601,8 +601,8 @@ export default class Store extends EventEmitter { } } - let addedElementIDs: Uint32Array = new Uint32Array(0); - let removedElementIDs: Uint32Array = new Uint32Array(0); + let addedElementIDs: Array = []; + let removedElementIDs: Array = []; let i = 2; while (i < operations.length) { @@ -711,13 +711,7 @@ export default class Store extends EventEmitter { }; this._idToElement.set(id, element); - - // TODO: don't recreate this on every iteration. - const oldAddedElementIDs = addedElementIDs; - addedElementIDs = new Uint32Array(addedElementIDs.length + 1); - addedElementIDs.set(oldAddedElementIDs); - addedElementIDs[oldAddedElementIDs.length] = id; - + addedElementIDs.push(id); this._adjustParentTreeWeight(parentElement, 1); } break; @@ -777,13 +771,7 @@ export default class Store extends EventEmitter { } this._adjustParentTreeWeight(parentElement, -element.weight); - - // Track removed items so search results can be updated - // TODO: no need to recreate this in a loop. - const oldRemovedElementIDs = removedElementIDs; - removedElementIDs = new Uint32Array(removedElementIDs.length + 1); - removedElementIDs.set(oldRemovedElementIDs); - removedElementIDs[oldRemovedElementIDs.length] = id; + removedElementIDs.push(id); } break; } @@ -872,7 +860,10 @@ export default class Store extends EventEmitter { console.groupEnd(); } - this.emit('mutated', [addedElementIDs, removedElementIDs]); + this.emit('mutated', [ + new Uint32Array(addedElementIDs), + new Uint32Array(removedElementIDs), + ]); }; onProfilingStatus = (isProfiling: boolean) => {