@samitouri / QOS-React-2 / commits / 534dfb0ca2

Optimize: don't recreate ID arrays all the time

Dan Abramov committed Apr 19, 2019 at 01:13 UTC 534dfb0ca2e1640fa24a8cf2893b23aaf3e3199b
1 file changed +8 -17
src/devtools/store.js
+8 -17
@@ -601,8 +601,8 @@ export default class Store extends EventEmitter {
601 }
602 }
603
604 - let addedElementIDs: Uint32Array = new Uint32Array(0);
605 - let removedElementIDs: Uint32Array = new Uint32Array(0);
604 + let addedElementIDs: Array<number> = [];
605 + let removedElementIDs: Array<number> = [];
606
607 let i = 2;
608 while (i < operations.length) {
@@ -711,13 +711,7 @@ export default class Store extends EventEmitter {
711 };
712
713 this._idToElement.set(id, element);
714 -
715 - // TODO: don't recreate this on every iteration.
716 - const oldAddedElementIDs = addedElementIDs;
717 - addedElementIDs = new Uint32Array(addedElementIDs.length + 1);
718 - addedElementIDs.set(oldAddedElementIDs);
719 - addedElementIDs[oldAddedElementIDs.length] = id;
720 -
714 + addedElementIDs.push(id);
715 this._adjustParentTreeWeight(parentElement, 1);
716 }
717 break;
@@ -777,13 +771,7 @@ export default class Store extends EventEmitter {
771 }
772
773 this._adjustParentTreeWeight(parentElement, -element.weight);
780 -
781 - // Track removed items so search results can be updated
782 - // TODO: no need to recreate this in a loop.
783 - const oldRemovedElementIDs = removedElementIDs;
784 - removedElementIDs = new Uint32Array(removedElementIDs.length + 1);
785 - removedElementIDs.set(oldRemovedElementIDs);
786 - removedElementIDs[oldRemovedElementIDs.length] = id;
774 + removedElementIDs.push(id);
775 }
776 break;
777 }
@@ -872,7 +860,10 @@ export default class Store extends EventEmitter {
860 console.groupEnd();
861 }
862
875 - this.emit('mutated', [addedElementIDs, removedElementIDs]);
863 + this.emit('mutated', [
864 + new Uint32Array(addedElementIDs),
865 + new Uint32Array(removedElementIDs),
866 + ]);
867 };
868
869 onProfilingStatus = (isProfiling: boolean) => {