Resolver perf: Prefer Maps over dynamic objects for normalised exports
field (5/n)
#1335
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.
Summary:
In V8, dynamic objects (that cannot use a hidden class optimisation) are slow -
Map
is both more performant and generally safer.By normalising the
exports
field to aMap
object (once, as normalisations are cached), subsequent lookup, iteration and reduction is considerably faster, improvingresolvePackageTargetFromExports
around 2x.This is an implementation detail of
PackageExportsResolve.js
, the normalised format is not exposed outside that module.This brings total resolution time for RNTester down below 100ms, vs >1500ms at the beginning of this stack. (I'll allow myself a 🚀 for that).
Changelog:
Reviewed By: huntie
Differential Revision: D61850544