refactor(transformer): share TransformCtx with ref not Rc#6118
Conversation
Your org has enabled the Graphite merge queue for merging into mainAdd the label “0-merge” to the PR and Graphite will automatically add it to the merge queue when it’s ready to merge. Or use the label “hotfix” to add to the merge queue as a hot fix. You must have a Graphite account and log in to Graphite in order to use the merge queue. Sign up using this link. |
|
This stack of pull requests is managed by Graphite. Learn more about stacking. Join @overlookmotel and the rest of your teammates on |
CodSpeed Performance ReportMerging #6118 will improve performances by 6.66%Comparing Summary
Benchmarks breakdown
|
TransformCtx with ref not RefCellTransformCtx with ref not Rc
Merge activity
|
Many transforms share `TransformCtx`. Currently it's shared with `Rc`, which has a cost as the `Rc` has to be cloned many times, and it also makes dropping `Transformer` more expensive. The PR changes that to share it as a normal reference `&TransformCtx` instead. This requires adding an inner `TransformerImpl`. `Transformer` is now just a facade which creates the `TransformCtx` and stores options. `Transformer::build_with_symbols_and_scopes` constructs `TransformerImpl` and runs the visitor on it. Unlikely to have any perf impact on larger files, but for small files where setup/teardown is a larger % of the overall workload, it may help a little.
c1801ef to
09e41c2
Compare
|
Just for the record, the large perf boost in this PR is not really related to the main thrust of the PR. It's all down to an unrelated change which got into this PR - adding The change of replacing |
…6121) Similar to #6118. Share `TypeScriptOptions` between transforms as a plain `&` reference, rather than an `Rc`, to reduce setup/teardown time. The code to parse pragmas from comments is moved into `Transformer::new`. This isn't the ideal place for it, but it means `TypeScriptOptions` can be shared with the existing `'ctx` lifetime, rather than having to have a 3rd lifetime `TypeScript<'a, 'ctx, 'options>`.
## [0.30.4] - 2024-09-28 ### Bug Fixes - 8582ae3 codegen: Missing parentheses if there is a pure comment before a NewExpression as a ComputedMemberExpression's callee (#6105) (Dunqing) - fd6798f parser: Remove unintended `pub Kind` (#6109) (Boshen) - 6f98aad sourcemap: Align sourcemap type with Rollup (#6133) (Boshen) - 64d4756 transformer: Fix debug assertion in `Stack` (#6106) (overlookmotel) ### Performance - 05852a0 codegen: Do not check whether there are annotation comments or not if we don't preserve annotation comments (#6107) (Dunqing) ### Documentation - 26a273a oxc-transform: Update README (Boshen) - e2c5baf transformer: Fix formatting of README (#6111) (overlookmotel) ### Refactor - 2090fce semantic: Fix lint warning in nightly (#6110) (overlookmotel) - 7bc3988 transformer: Remove dead code (#6124) (overlookmotel) - 07fe45b transformer: Exponentiation operator: convert to match (#6123) (overlookmotel) - 4387845 transformer: Share `TypeScriptOptions` with ref not `Rc` (#6121) (overlookmotel) - 09e41c2 transformer: Share `TransformCtx` with ref not `Rc` (#6118) (overlookmotel) - 58fd6eb transformer: Pre-allocate more stack space (#6095) (overlookmotel) - 9ac80bd transformer: Add wrapper around `NonNull` (#6115) (overlookmotel) - c50500e transformer: Move common stack functionality into `StackCommon` trait (#6114) (overlookmotel) - 9839059 transformer: Simplify `StackCapacity` trait (#6113) (overlookmotel) --------- Co-authored-by: Boshen <[email protected]> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

Many transforms share
TransformCtx. Currently it's shared withRc, which has a cost as theRchas to be cloned many times, and it also makes droppingTransformermore expensive.The PR changes that to share it as a normal reference
&TransformCtxinstead.This requires adding an inner
TransformerImpl.Transformeris now just a facade which creates theTransformCtxand stores options.Transformer::build_with_symbols_and_scopesconstructsTransformerImpland runs the visitor on it.Unlikely to have any perf impact on larger files, but for small files where setup/teardown is a larger % of the overall workload, it may help a little.