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) => {