Skip to content

Commit bc3b589

Browse files
committed
feat: add ui-components case
1 parent 8444a87 commit bc3b589

15 files changed

+3287
-33
lines changed

.github/workflows/benchmark.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ jobs:
1818
strategy:
1919
matrix:
2020
os: [macos-15]
21-
# Failed to run Vite on Windows
22-
# os: [macos-15, windows-latest]
23-
case: [react-1k, react-5k, react-10k, rome]
21+
case: [react-1k, react-5k, react-10k, ui-components, rome]
2422

2523
steps:
2624
- name: Checkout

README.md

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -121,31 +121,61 @@ CASE=react-10k pnpm benchmark
121121
| Vite (SWC) 7.0.0 | 5369.2kB | 1409.3kB |
122122
| webpack (SWC) 5.99.9 | 5993.4kB | 1464.6kB |
123123

124-
### rome
124+
### ui-components
125125

126-
A complex TypeScript Node.js project that includes multiple packages from the [rome](https://github.com/rome/tools) toolchain.
126+
A React app that import some UI components from several popular UI libraries.
127127

128128
```bash
129-
CASE=rome pnpm benchmark
129+
CASE=ui-components pnpm benchmark
130130
```
131131

132132
#### Build performance
133133

134134
| Name | Prod build |
135135
| ---------------------- | ---------- |
136-
| Rspack CLI 1.4.6 | 742ms |
137-
| Rsbuild 1.4.6 | 787ms |
138-
| Rolldown 1.0.0-beta.25 | 272ms |
139-
| webpack (SWC) 5.100.0 | 5548ms |
136+
| Rspack CLI 1.4.6 | 1223ms |
137+
| Rsbuild 1.4.6 | 1286ms |
138+
| Rolldown 1.0.0-beta.25 | 516ms |
139+
| webpack (SWC) 5.100.0 | 10935ms |
140140

141141
#### Bundle size
142142

143143
| Name | Total size | Gzipped size |
144144
| ---------------------- | ---------- | ------------ |
145-
| Rspack CLI 1.4.6 | 1009.3kB | 270.9kB |
146-
| Rsbuild 1.4.6 | 1009.3kB | 270.9kB |
147-
| Rolldown 1.0.0-beta.25 | 1016.4kB | 273.6kB |
148-
| webpack (SWC) 5.100.0 | 1023.3kB | 272.0kB |
145+
| Rspack CLI 1.4.6 | 3191.0kB | 982.5kB |
146+
| Rsbuild 1.4.6 | 1386.7kB | 421.9kB |
147+
| Rolldown 1.0.0-beta.25 | 2668.4kB | 818.4kB |
148+
| webpack (SWC) 5.100.0 | 2659.5kB | 808.0kB |
149+
150+
### rome
151+
152+
A complex TypeScript Node.js project that includes multiple packages from the [rome](https://github.com/rome/tools) toolchain.
153+
154+
```bash
155+
CASE=rome pnpm benchmark
156+
```
157+
158+
#### Build performance
159+
160+
| Name | Prod build |
161+
| --------------------------- | ---------- |
162+
| Rspack CLI 1.4.6 | 1129ms |
163+
| Rsbuild 1.4.6 | 1181ms |
164+
| Vite (Rollup + SWC) 7.0.4 | 5443ms |
165+
| Vite (Rolldown + Oxc) 7.0.7 | 636ms |
166+
| Rolldown 1.0.0-beta.25 | 528ms |
167+
| webpack (SWC) 5.100.0 | 11202ms |
168+
169+
#### Bundle size
170+
171+
| Name | Total size | Gzipped size |
172+
| --------------------------- | ---------- | ------------ |
173+
| Rspack CLI 1.4.6 | 1493.9kB | 406.5kB |
174+
| Rsbuild 1.4.6 | 1310.5kB | 400.8kB |
175+
| Vite (Rollup + SWC) 7.0.4 | 1315.4kB | 412.4kB |
176+
| Vite (Rolldown + Oxc) 7.0.7 | 1342.3kB | 416.9kB |
177+
| Rolldown 1.0.0-beta.25 | 1358.2kB | 417.8kB |
178+
| webpack (SWC) 5.100.0 | 1349.6kB | 407.6kB |
149179

150180
## Run locally
151181

benchmark.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,12 @@ async function runDevBenchmark(buildTool, perfResult) {
462462
await coolDown();
463463
logger.success(color.dim(buildTool.name) + ' dev server closed');
464464

465-
// Clean up dist dir
466-
await fse.remove(distDir);
467465
}
468466

469467
async function runBuildBenchmark(buildTool, perfResult) {
468+
// Clean up dist dir
469+
await fse.remove(distDir);
470+
470471
const buildTime = await buildTool.build();
471472

472473
const sizes = sizeResults[buildTool.name] || (await getFileSizes(distDir));
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export const config = {
2+
supportedTools: [
3+
'rspack',
4+
'rsbuild',
5+
'vite',
6+
'rolldown-vite',
7+
'rolldown',
8+
'webpack',
9+
],
10+
defaultTools: [
11+
'rspack',
12+
'rsbuild',
13+
'vite',
14+
'rolldown-vite',
15+
'rolldown',
16+
'webpack',
17+
],
18+
dev: false,
19+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>Document</title>
8+
</head>
9+
<body>
10+
<div id="root"></div>
11+
</body>
12+
</html>

cases/ui-components/index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>Document</title>
8+
</head>
9+
<body>
10+
<div id="root"></div>
11+
<script type="module" src="./src/index.js"></script>
12+
</body>
13+
</html>

cases/ui-components/package.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "ui-libraries",
3+
"version": "0.0.0",
4+
"scripts": {
5+
"build:rolldown": "rolldown build --config rolldown.config.mjs",
6+
"build:rspack": "rspack build",
7+
"build:rsbuild": "rsbuild build",
8+
"build:webpack": "webpack build",
9+
"build:vite": "node ../../node_modules/vite/bin/vite.js build",
10+
"build:rolldown-vite": "node ../../node_modules/rolldown-vite/bin/vite.js build -c rolldown-vite.config.mjs"
11+
},
12+
"dependencies": {
13+
"@chakra-ui/react": "^3.22.0",
14+
"@emotion/react": "^11.14.0",
15+
"@emotion/styled": "^11.14.1",
16+
"@headlessui/react": "^2.2.4",
17+
"@mantine/core": "^8.1.3",
18+
"@mui/material": "^7.2.0",
19+
"antd": "^5.26.4",
20+
"element-plus": "^2.10.3",
21+
"react": "^19.1.0",
22+
"react-bootstrap": "^2.10.10",
23+
"react-dom": "^19.1.0",
24+
"vant": "^4.9.20",
25+
"vue": "^3.5.17",
26+
"vuetify": "^3.9.0"
27+
}
28+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// @ts-check
2+
import { defineConfig } from 'rolldown-vite';
3+
import { target } from '../../shared.mjs';
4+
5+
export default defineConfig({
6+
build: {
7+
target,
8+
},
9+
experimental: {
10+
enableNativePlugin: true,
11+
},
12+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @ts-check
2+
import { defineConfig } from 'rolldown';
3+
import path from 'node:path';
4+
5+
export default defineConfig({
6+
input: {
7+
main: path.join(import.meta.dirname, 'src', 'index.js'),
8+
},
9+
define: {
10+
'process.env.NODE_ENV': JSON.stringify('production'),
11+
},
12+
output: {
13+
minify: true,
14+
},
15+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @ts-check
2+
import { defineConfig } from '@rsbuild/core';
3+
import { targetBrowser } from '../../shared.mjs';
4+
5+
export default defineConfig({
6+
output: {
7+
overrideBrowserslist: [targetBrowser],
8+
},
9+
performance: {
10+
chunkSplit: {
11+
strategy: 'all-in-one',
12+
},
13+
},
14+
});

0 commit comments

Comments
 (0)