Skip to content

Comments

docs: drafting code splitting#4951

Merged
hyf0 merged 16 commits intomainfrom
06-14-docs_drafting_code_splitting
Jun 13, 2025
Merged

docs: drafting code splitting#4951
hyf0 merged 16 commits intomainfrom
06-14-docs_drafting_code_splitting

Conversation

@hyf0
Copy link
Member

@hyf0 hyf0 commented Jun 13, 2025

No description provided.

@hyf0 hyf0 marked this pull request as ready for review June 13, 2025 16:08
Copy link
Member Author

hyf0 commented Jun 13, 2025

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

@netlify
Copy link

netlify bot commented Jun 13, 2025

Deploy Preview for rolldown-rs ready!

Name Link
🔨 Latest commit 0982df7
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/684c5b3527165e000892de3d
😎 Deploy Preview https://deploy-preview-4951--rolldown-rs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

hyf0 and others added 4 commits June 14, 2025 00:12
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
@hyf0 hyf0 enabled auto-merge June 13, 2025 16:13
@hyf0 hyf0 requested a review from shulaoda June 13, 2025 16:13
hyf0 and others added 5 commits June 14, 2025 01:02
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
@hyf0 hyf0 disabled auto-merge June 13, 2025 17:04
@hyf0 hyf0 enabled auto-merge June 13, 2025 17:04
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
hyf0 and others added 3 commits June 14, 2025 01:08
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
@hyf0 hyf0 added this pull request to the merge queue Jun 13, 2025
Merged via the queue into main with commit efbeae5 Jun 13, 2025
20 checks passed
@hyf0 hyf0 deleted the 06-14-docs_drafting_code_splitting branch June 13, 2025 17:14
- `import('./dyn-entry.js')` creates a dynamic entry, whose entry module is `dyn-entry.js`
- `entry.js` imports `dyn-entry.js` via `import(...)` which is a dynamic import. People use it to load code on demand, so we don't want to put imported code together with importers and we don't consider them as connected statically.
- There're two groups of statically connected modules. Group 1: `entry.js` and `foo.js`. Group 2: `dyn-entry.js` and `bar.js`
- Since there are two groups, in the end, we will generate two chunks. These chunks are created due to as entries, they are also called as `entry chunk`s.
Copy link
Contributor

Choose a reason for hiding this comment

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

There appears to be a grammatical error in this sentence. Consider revising "created due to as entries" to either "created as entries" or "created due to being entries" for better clarity and flow.

Suggested change
- Since there are two groups, in the end, we will generate two chunks. These chunks are created due to as entries, they are also called as `entry chunk`s.
- Since there are two groups, in the end, we will generate two chunks. These chunks are created as entries, they are also called `entry chunk`s.

Spotted by Diamond

Is this helpful? React 👍 or 👎 to let us know.

- `entry.js` imports `dyn-entry.js` via `import(...)` which is a dynamic import. People use it to load code on demand, so we don't want to put imported code together with importers and we don't consider them as connected statically.
- There're two groups of statically connected modules. Group 1: `entry.js` and `foo.js`. Group 2: `dyn-entry.js` and `bar.js`
- Since there are two groups, in the end, we will generate two chunks. These chunks are created due to as entries, they are also called as `entry chunk`s.
- `Entry chunk`s include `initial chunk`s and `dynamic chunk`s. They are easy to be distinguished. `initial chunk`s are generated due to users' configuration. `input: ['./a.js', './b.js']` defines two `initial chunk`s. `Dynamic chunk`s are created due to dynamic imports.
Copy link
Contributor

Choose a reason for hiding this comment

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

The backtick formatting is inconsistent in this section. For technical terms, consider using backticks consistently throughout:

`Entry chunk`s include `initial chunk`s and `dynamic chunk`s. They are easy to distinguish. `initial chunk`s are generated due to users' configuration. `input: ['./a.js', './b.js']` defines two `initial chunk`s. `Dynamic chunk`s are created due to dynamic imports.

Also note the small wording change from "easy to be distinguished" to "easy to distinguish" for better readability.

Suggested change
- `Entry chunk`s include `initial chunk`s and `dynamic chunk`s. They are easy to be distinguished. `initial chunk`s are generated due to users' configuration. `input: ['./a.js', './b.js']` defines two `initial chunk`s. `Dynamic chunk`s are created due to dynamic imports.
- `Entry chunk`s include `initial chunk`s and `dynamic chunk`s. They are easy to distinguish. `initial chunk`s are generated due to users' configuration. `input: ['./a.js', './b.js']` defines two `initial chunk`s. `Dynamic chunk`s are created due to dynamic imports.

Spotted by Diamond

Is this helpful? React 👍 or 👎 to let us know.

### Respecting Execution Order doesn't take precedence

- However, rolldown sometimes places modules without respecting their original order, because ensuring modules are singleton takes precedence over placing modules in the order they are declared.

Copy link
Contributor

Choose a reason for hiding this comment

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

The capitalization of "rolldown" should be consistent throughout the document. In this sentence, it should be "Rolldown" with a capital 'R' to match the capitalization used elsewhere in the document.

Suggested change
- However, Rolldown sometimes places modules without respecting their original order, because ensuring modules are singleton takes precedence over placing modules in the order they are declared.

Spotted by Diamond

Is this helpful? React 👍 or 👎 to let us know.

github-actions bot pushed a commit that referenced this pull request Jun 15, 2025
## [1.0.0-beta.16] - 2025-06-15

### 🚀 Features

- rolldown: feat(rolldown): oxc v0.73.0 by @Boshen in [#4948](#4948)
- types: feat(types): generate HMR runtime types by @sapphi-red in [#4928](#4928)
- rolldown_plugin_build_import_analysis: feat(rolldown_plugin_build_import_analysis): align with rolldown-vite by @shulaoda in [#4931](#4931)
- feat: allow to configure`experimental#attachDebugInfo: 'none'` to disable generating `#region` comments by @TheAlexLichter in [#4918](#4918)

### 🐛 Bug Fixes

- fix: deduplicate entry point by @IWANABETHATGUY in [#4956](#4956)
- fix: diagnostic message on minified code is too long to be readable by @IWANABETHATGUY in [#4950](#4950)
- fix: deduplicated entry points when have same `id`, `name`, and `filename` by @IWANABETHATGUY in [#4947](#4947)
- fix: unbundle does not work with outExtensions by @IWANABETHATGUY in [#4945](#4945)
- types: fix(types): remove `undefined` from return type of `generateHmrPatch` and `hmrInvalidate` by @sapphi-red in [#4943](#4943)
- fix: handle error in `hmrInvalidate` by @sapphi-red in [#4942](#4942)
- rolldown_plugin_build_import_analysis: fix(rolldown_plugin_build_import_analysis): preload helper is imported even if it’s not needed by @shulaoda in [#4936](#4936)
- hmr: fix(hmr): avoid panic after syntax error by @sapphi-red in [#4898](#4898)
- strictExecutionOrder: fix(strictExecutionOrder): ensure initialization chain of entry exports by @hyf0 in [#4933](#4933)
- fix: should not panic when meet a syntax error in watch mode. by @IWANABETHATGUY in [#4926](#4926)
- fix: regression, id filter normalization for windows is not working by @IWANABETHATGUY in [#4922](#4922)
- rolldown_plugin_json: fix(rolldown_plugin_json): incorrect default JSON export by @shulaoda in [#4924](#4924)

### 🚜 Refactor

- refactor: avoid unnecessary collect by @IWANABETHATGUY in [#4949](#4949)
- refactor: get normalized options via binding by @IWANABETHATGUY in [#4938](#4938)
- refactor: include DevRuntime base class even if custom HMR implementation is passed by @sapphi-red in [#4929](#4929)

### 📚 Documentation

- docs: clarify minifier state by @TheAlexLichter in [#4953](#4953)
- docs: drafting code splitting by @hyf0 in [#4951](#4951)
- docs: add link to repl by @sxzz in [#4917](#4917)
- pluginutils: docs(pluginutils): add example to simple filter functions by @sapphi-red in [#4915](#4915)

### 🧪 Testing

- test: add testcase for normalized output options by @IWANABETHATGUY in [#4939](#4939)
- hmr: test(hmr): enable `expectExecuted` for `generatePatchError` test by @sapphi-red in [#4937](#4937)
- test: evaluate hmr tests in node by @sapphi-red in [#4930](#4930)
- test: add "non used export" hmr test by @sapphi-red in [#4900](#4900)
- test: enable expectExecuted in HMR tests by @sapphi-red in [#4927](#4927)

### ⚙️ Miscellaneous Tasks

- deps: chore(deps): lock file maintenance npm packages by @renovate[bot] in [#4866](#4866)
- infra: chore(infra): remove comments related to `cspell` by @shulaoda in [#4940](#4940)
- ci: remove cargo bench test by @IWANABETHATGUY in [#4925](#4925)
@Boshen Boshen mentioned this pull request Jun 15, 2025
- Code splitting is not controllable. It runs following certain rules.
- Thus, we will also refer to it as _`automatic chunking`_ against _`manual chunking`_ done by `advancedChunks`.

## `Entry chunk`s
Copy link
Member

Choose a reason for hiding this comment

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

I don't think we should wrap "entry chunk" with code backticks - these are more like a special term rather than inline code, so maybe just make them bold, e.g. entry chunks

Copy link
Member Author

Choose a reason for hiding this comment

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

Got it.

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.

3 participants