perf: Improve @babel/types builders#16842
Conversation
|
Build successful! You can test your changes in the REPL here: https://babeljs.io/repl/build/57984 |
Maybe because it makes |
| }); | ||
| }; | ||
| const defs = NODE_FIELDS.AssignmentExpression; | ||
| validate(defs.operator, node, "operator", operator); |
There was a problem hiding this comment.
Can you check we need to pass the last parameter, or can validate read it from node["operator"]? From a perf perspective.
There was a problem hiding this comment.
When I remove the last argument and access node, there is also a difference of nearly 40%, which I suspect is for the same reason as the second commit improving performance.
Perhaps obj.prop can be optimized better than obj[propName].
PS F:\babel\benchmark\babel-types\builders> node .\memberExpression.mjs
baseline memberExpression builder: 854_712 ops/sec ±3.47% (0.001ms)
current memberExpression builder: 11_459_581 ops/sec ±0.53% (0ms)
I added a new benchmark, but something even stranger seems to be happening. 😅 (in use-cjs) and |
|
@liuxingbaoyu The only difference I see is the second one is is importing with |
|
I remember I tried it and the results were still different. But today when I tried it again, I found that all benchmarks gave the same results. 🤦♂️ |
nicolo-ribaudo
left a comment
There was a problem hiding this comment.
I strongly prefer this PR to the other one
##### [`v7.25.7](https://github.com/babel/babel/blob/HEAD/CHANGELOG.md#v7257-2024-10-02) ##### 🐛 Bug Fix - `babel-helper-validator-identifier` - [#16825](babel/babel#16825) fix: update identifier to unicode 16 ([@JLHwung](https://github.com/JLHwung)) - `babel-traverse` - [#16814](babel/babel#16814) fix: issue with node path keys updated on unrelated paths ([@DylanPiercey](https://github.com/DylanPiercey)) - `babel-plugin-transform-classes` - [#16797](babel/babel#16797) Use an inclusion rather than exclusion list for `super()` check ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - `babel-generator` - [#16788](babel/babel#16788) Fix printing of TS `infer` in compact mode ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - [#16785](babel/babel#16785) Print TS type annotations for destructuring in assignment pattern ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - [#16778](babel/babel#16778) Respect `[no LineTerminator here]` after nodes ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) ##### 💅 Polish - `babel-types` - [#16852](babel/babel#16852) Add deprecated JSDOC for fields ([@liuxingbaoyu](https://github.com/liuxingbaoyu)) ##### 🏠 Internal - `babel-core` - [#16820](babel/babel#16820) Allow sync loading of ESM when `--experimental-require-module` ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - `babel-helper-compilation-targets`, `babel-helper-plugin-utils`, `babel-preset-env` - [#16858](babel/babel#16858) Add browserslist config to external dependency ([@JLHwung](https://github.com/JLHwung)) - `babel-plugin-proposal-destructuring-private`, `babel-plugin-syntax-decimal`, `babel-plugin-syntax-import-reflection`, `babel-standalone` - [#16809](babel/babel#16809) Archive syntax-import-reflection and syntax-decimal ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - `babel-generator` - [#16779](babel/babel#16779) Simplify logic for `[no LineTerminator here]` before nodes ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) ##### 🏃♀️ Performance - `babel-plugin-transform-typescript` - [#16875](babel/babel#16875) perf: Avoid extra cloning of namespaces ([@liuxingbaoyu](https://github.com/liuxingbaoyu)) - `babel-types` - [#16842](babel/babel#16842) perf: Improve [@babel/types](https://github.com/babel/types) builders ([@liuxingbaoyu](https://github.com/liuxingbaoyu)) - [#16828](babel/babel#16828) Only access `BABEL_TYPES_8_BREAKING` at startup ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
##### [`v7.25.7](https://github.com/babel/babel/blob/HEAD/CHANGELOG.md#v7257-2024-10-02) ##### 🐛 Bug Fix - `babel-helper-validator-identifier` - [#16825](babel/babel#16825) fix: update identifier to unicode 16 ([@JLHwung](https://github.com/JLHwung)) - `babel-traverse` - [#16814](babel/babel#16814) fix: issue with node path keys updated on unrelated paths ([@DylanPiercey](https://github.com/DylanPiercey)) - `babel-plugin-transform-classes` - [#16797](babel/babel#16797) Use an inclusion rather than exclusion list for `super()` check ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - `babel-generator` - [#16788](babel/babel#16788) Fix printing of TS `infer` in compact mode ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - [#16785](babel/babel#16785) Print TS type annotations for destructuring in assignment pattern ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - [#16778](babel/babel#16778) Respect `[no LineTerminator here]` after nodes ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) ##### 💅 Polish - `babel-types` - [#16852](babel/babel#16852) Add deprecated JSDOC for fields ([@liuxingbaoyu](https://github.com/liuxingbaoyu)) ##### 🏠 Internal - `babel-core` - [#16820](babel/babel#16820) Allow sync loading of ESM when `--experimental-require-module` ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - `babel-helper-compilation-targets`, `babel-helper-plugin-utils`, `babel-preset-env` - [#16858](babel/babel#16858) Add browserslist config to external dependency ([@JLHwung](https://github.com/JLHwung)) - `babel-plugin-proposal-destructuring-private`, `babel-plugin-syntax-decimal`, `babel-plugin-syntax-import-reflection`, `babel-standalone` - [#16809](babel/babel#16809) Archive syntax-import-reflection and syntax-decimal ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) - `babel-generator` - [#16779](babel/babel#16779) Simplify logic for `[no LineTerminator here]` before nodes ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo)) ##### 🏃♀️ Performance - `babel-plugin-transform-typescript` - [#16875](babel/babel#16875) perf: Avoid extra cloning of namespaces ([@liuxingbaoyu](https://github.com/liuxingbaoyu)) - `babel-types` - [#16842](babel/babel#16842) perf: Improve [@babel/types](https://github.com/babel/types) builders ([@liuxingbaoyu](https://github.com/liuxingbaoyu)) - [#16828](babel/babel#16828) Only access `BABEL_TYPES_8_BREAKING` at startup ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
Fixes #1, Fixes #2Ref: #15843
I was surprised that the second commit improved performance by nearly 40%.