perf: lazy load preset-env plugins#13076
Merged
nicolo-ribaudo merged 1 commit intobabel:mainfrom Mar 30, 2021
Merged
Conversation
JLHwung
commented
Mar 30, 2021
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit 36de510:
|
Collaborator
|
Build successful! You can test your changes in the REPL here: https://babeljs.io/repl/build/44884/ |
JLHwung
commented
Mar 30, 2021
e9ef29c to
36de510
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
preset-envloading on modern targetsThis commit is drafted by a codemod. On modern targets, most plugins in
preset-envare not actually enabled. However, when Babel is loadingavailable-plugins, these plugins are still imported. This PR improves loading speed by lazy loading all the available plugins. They are now loaded only whengetPluginis called.The cost of resolving many small files and their node_modules is tremendous: In the benchmark case, loading unused plugins costs 663ms. In other words, this PR improving loading
preset-envfrom 1.17s to 477ms when compiling against Node.js 15.Benchmark setup:
Create a
babel.config.jsonwith onlytargets:{ "targets": { "node": 15 } }Run V8 CPU profiler separately on Babel repo
Load the CPU profile in Chrome DevTools. Check the time of the second LoadFullConfig call
Before:

After:
