perf(treeData): decrease Tree Grid expandAll/collapseAll time by 40x #1681
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Another perf optimization that is probably O(n square) if not more.
When collapsing/expanding items in the grid, we also need to update the hierarchical (tree) dataset and the previous code was searching for the item in the tree and then was toggling its collapse prop. When we have a single item that we collapse, searching in the tree is relatively quick, but when we toggle thousand of items and we search them one-by-one then this becomes extremely costly to execute (search+toggle for every row). What we can do to decrease the time is to keep doing the toggle of the collapse prop on the flat array BUT instead of searching each item in the tree, we can simply recreate the hierarchical (tree) only once and we're done (40x decrease as shown below).
Perf logs for Example 5 with 25k items
Before (expand all, collapse all)
tree collapse/expand: 2572.123779296875 ms
tree collapse/expand: 2432.596923828125 ms
After (expand all, collapse all)
tree collapse/expand: 65.237060546875 ms
tree collapse/expand: 57.0859375 ms