Skip to content

Comments

perf(rolldown): minor performance optimization#6271

Merged
graphite-app[bot] merged 1 commit intomainfrom
09-18-perf_rolldown_minor_performance_optimization
Sep 18, 2025
Merged

perf(rolldown): minor performance optimization#6271
graphite-app[bot] merged 1 commit intomainfrom
09-18-perf_rolldown_minor_performance_optimization

Conversation

@Brooooooklyn
Copy link
Member

  • pre-allocate memory
  • use simdutf8 rather than String utf8 check
  • avoid double utf8 checks in text_to_string_literal

Copy link
Member Author

Brooooooklyn commented Sep 18, 2025


How to use the Graphite Merge Queue

Add the label graphite: merge to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@Brooooooklyn Brooooooklyn force-pushed the 09-18-perf_rolldown_minor_performance_optimization branch 3 times, most recently from dbc9162 to 1b110f4 Compare September 18, 2025 13:58
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements several minor performance optimizations across the rolldown codebase, focusing on memory pre-allocation and UTF-8 validation improvements.

  • Replaces standard library UTF-8 validation with simdutf8 for better performance
  • Pre-allocates memory for String operations to reduce reallocations
  • Eliminates redundant UTF-8 validation checks by using unsafe operations where safety is guaranteed

Reviewed Changes

Copilot reviewed 8 out of 9 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
crates/rolldown_utils/src/percent_encoding.rs Switches from std::str to simdutf8 for UTF-8 validation
crates/rolldown_utils/src/mime.rs Adds inline attribute to is_valid_utf8 function
crates/rolldown_utils/src/ecmascript.rs Pre-allocates String capacity in legitimize_identifier_name
crates/rolldown_utils/src/base64.rs Adds inline attributes to base64 encoding functions
crates/rolldown_plugin_data_uri/src/lib.rs Uses unsafe UTF-8 conversion after base64 decoding
crates/rolldown_common/src/types/str_or_bytes.rs Optimizes UTF-8 validation and conversion
crates/rolldown_common/Cargo.toml Adds simdutf8 dependency
crates/rolldown/src/utils/text_to_esm.rs Pre-allocates memory and avoids double UTF-8 validation in JSON serialization

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@Brooooooklyn Brooooooklyn force-pushed the 09-18-perf_rolldown_minor_performance_optimization branch from 1b110f4 to 7da7c8f Compare September 18, 2025 14:03
@github-actions
Copy link
Contributor

github-actions bot commented Sep 18, 2025

Benchmarks Rust

  • target: main(2c840d5)
  • pr: 09-18-perf_rolldown_minor_performance_optimization(230eae6)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00    153.4±2.77ms        ? ?/sec    1.04    160.1±2.51ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.00    165.9±3.28ms        ? ?/sec    1.03    171.5±3.35ms        ? ?/sec
bundle/bundle@rome_ts                                        1.00    239.7±4.60ms        ? ?/sec    1.02    244.3±5.34ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    268.0±3.43ms        ? ?/sec    1.05    282.3±5.05ms        ? ?/sec
bundle/bundle@threejs                                        1.00     85.6±2.35ms        ? ?/sec    1.02     87.0±1.51ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     97.9±1.47ms        ? ?/sec    1.01     99.1±1.65ms        ? ?/sec
bundle/bundle@threejs10x                                     1.00    958.5±9.10ms        ? ?/sec    1.03   982.9±12.41ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00   1058.4±8.62ms        ? ?/sec    1.01   1066.0±9.79ms        ? ?/sec
scan/scan@rome_ts                                            1.00    216.7±5.24ms        ? ?/sec    1.00    215.8±4.96ms        ? ?/sec
scan/scan@threejs                                            1.00     77.0±0.98ms        ? ?/sec    1.00     77.1±1.63ms        ? ?/sec
scan/scan@threejs10x                                         1.00   849.0±23.70ms        ? ?/sec    1.00   848.5±22.77ms        ? ?/sec

@Brooooooklyn Brooooooklyn force-pushed the 09-18-perf_rolldown_minor_performance_optimization branch from 7da7c8f to 3fd5486 Compare September 18, 2025 14:29
@Brooooooklyn Brooooooklyn force-pushed the 09-18-perf_rolldown_take_advantage_of_tokio_blocking_threads branch from cec96a5 to 38cfd74 Compare September 18, 2025 14:29
@Brooooooklyn Brooooooklyn force-pushed the 09-18-perf_rolldown_minor_performance_optimization branch from 3fd5486 to 1c71f7e Compare September 18, 2025 14:45
@Brooooooklyn
Copy link
Member Author

cursor review

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no bugs!


Copy link
Member

IWANABETHATGUY commented Sep 18, 2025

Merge activity

@graphite-app graphite-app bot changed the base branch from 09-18-perf_rolldown_take_advantage_of_tokio_blocking_threads to graphite-base/6271 September 18, 2025 17:12
@graphite-app graphite-app bot changed the base branch from graphite-base/6271 to main September 18, 2025 17:20
- pre-allocate memory
- use simdutf8 rather than String utf8 check
- avoid double utf8 checks in text_to_string_literal
@graphite-app graphite-app bot force-pushed the 09-18-perf_rolldown_minor_performance_optimization branch from 1c71f7e to 230eae6 Compare September 18, 2025 17:21
@netlify
Copy link

netlify bot commented Sep 18, 2025

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 230eae6
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/68cc3f9dde775100083589ef

@graphite-app graphite-app bot merged commit 230eae6 into main Sep 18, 2025
29 checks passed
@graphite-app graphite-app bot deleted the 09-18-perf_rolldown_minor_performance_optimization branch September 18, 2025 17:33
shulaoda pushed a commit that referenced this pull request Sep 22, 2025
## [1.0.0-beta.39] - 2025-09-22

⚡ MacOS Performance Boost

- 10%-30% faster bundling
- Up to 45% in extreme cases

### 🚀 Features

- rolldown: oxc v0.90.0 + other oxc crate updates (#6274) by @Boshen
- support ignoring `/* @vite-ignore */` comment for dynamic imports (#6264) by @IWANABETHATGUY
- dev: merge mergeable queued tasks into one (#6253) by @hyf0
- dev: ignore self imports when computing update for invalidate (#6252) by @sapphi-red
- support `#__NO_SIDE_EFFECTS__` annotation for export default function declaration (#6239) by @IWANABETHATGUY
- rolldown_plugin_dynamic_import_vars: respect `@vite-ignore` comment (#6240) by @shulaoda
- rolldown_plugin_import_glob: support `exhaustive` option (#6236) by @shulaoda
- cross chunk /* @__NO_SIDE_EFFECTS__ */ support (#6207) by @IWANABETHATGUY
- rolldown_plugin_react_refresh_wrapper: make the plugin callable (#6229) by @sapphi-red

### 🐛 Bug Fixes

- handle optional chaining in scope hoisting member expression rewriting (#6278) by @shulaoda
- release: Fix semver commit release format to use plus instead of dash (#6273) by @Copilot
- dev: `ensure_latest_build_output` should work correctly when `eagerBuild: false` (#6262) by @hyf0
- browser: does not work in stackblitz (#6257) by @shulaoda
- only inline constants that are not reassigned (#6247) by @IWANABETHATGUY
- handle lexical declarations in root scope (#6230) by @IWANABETHATGUY

### 🚜 Refactor

- move oxc runtime helper generation from `build.rs` to task generator (#6284) by @shulaoda
- remove unused `SpanExt` (#6266) by @IWANABETHATGUY
- remove `@rolldown-ignore` ignore comment support (#6265) by @IWANABETHATGUY
- enhance CommonJsAstType to track property names (#6250) by @IWANABETHATGUY
- simplify usage for `Address::from` (#6245) by @IWANABETHATGUY
- remove `stmt_info_idx` in StmtInfo (#6244) by @IWANABETHATGUY
- extract `CrossModuleOptimizationRunnerContext` in cross_module_optimization (#6243) by @IWANABETHATGUY
- dev: task-queue based deisgn (#6233) by @hyf0
- extract immutable context from AstScanner (#6238) by @IWANABETHATGUY
- dev: rename `WatcherEventService` to `BuildDriverService` (#6232) by @hyf0
- move FlatOptions to rolldown_common (#6235) by @IWANABETHATGUY
- extract mutable state from ScopeHoistingFinalizerContext (#6234) by @IWANABETHATGUY
- wait `this.load` using futures instead of callbacks (#6222) by @sapphi-red
- rolldown_plugin_transform: remove unused `runtime_resolve_base` option (#6226) by @sapphi-red

### 📚 Documentation

- add "edit this page on GitHub" button (#6241) by @siaeyy

### ⚡ Performance

- rolldown: minor performance optimization (#6271) by @Brooooooklyn
- rolldown: take advantage of tokio blocking threads (#6270) by @Brooooooklyn

### 🧪 Testing

- dev: add rebuild after HMR case (#6260) by @sapphi-red
- dev: support full reload in tests (#6259) by @sapphi-red
- dev: extract waitFor from waitForPathExists (#6261) by @sapphi-red
- add class like cases for empty function optimizations (#6248) by @sapphi-red

### ⚙️ Miscellaneous Tasks

- deps: update github-actions (#6298) by @renovate[bot]
- deps: update dependency dprint/dprint-plugin-typescript to v0.95.11 (#6296) by @renovate[bot]
- deps: update dependency dprint/dprint-plugin-markdown to v0.19.0 (#6295) by @renovate[bot]
- deps: update dependency g-plane/pretty_yaml to v0.5.1 (#6294) by @renovate[bot]
- use a forked version of openharmony-rs/setup-ohos-sdk (#6290) by @Boshen
- deps: update dependency tsdown to v0.15.4 (#6286) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.16.7 (#6285) by @renovate[bot]
- rust: continue to make `cargo publish --workspace` work (#6281) by @Boshen
- deps: update dependency tsdown to v0.15.3 (#6280) by @renovate[bot]
- rust: fixes for `cargo publish --dry-run --workspace` (#6279) by @Boshen
- deps: update dependency rust to v1.90.0 (#6277) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.16.6 (#6276) by @renovate[bot]
- adding tracing for all sub stage in LinkStage:link (#6268) by @IWANABETHATGUY
- deps: update oxc-project/setup-node action to v1.0.4 (#6258) by @renovate[bot]
- deps: update github-actions (#6249) by @renovate[bot]
- deps: update dependency tsdown to v0.15.2 (#6242) by @renovate[bot]
- dev: output error when the initial bundle failed (#6228) by @sapphi-red

### ❤️ New Contributors

* @siaeyy made their first contribution in [#6241](#6241)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants