[Regression] [Performance] Fix delayed sidebar hover animation for large projects #934
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.
Bug/issue #, if applicable: #919 (rdar://147239963)
Summary
Fixes a regression with the performance of the sidebar hover animation that can be very slow for large projects with many sidebar items.
This regression was introduced with #904.
The cause of the poor performance turned out to be a big jump in memory usage, which noticeably impacted the performance of hovering over sidebar items. By utilizing
Object.freeze
again, we prevent Vue from creating a large number of proxy items that it would normally use to track changes to state data and thereby keep the memory usage down for projects with many index nodes. Since we don't modify this data after fetching/deserializing it, this should be an acceptable tradeoff.In the future if we need to handle even larger amounts of data or need to track changes to these nodes, we will likely need to come up with a way of streaming this data instead of storing it all in memory.
Testing
Steps:
Navigator
related changes to allow further customization #904 was merged.Checklist
Make sure you check off the following items. If they cannot be completed, provide a reason.
Added tests(no straightforward way to unit test this change)npm test
, and it succeeded