1
1
import { bench , describe } from 'vitest'
2
2
import { createRenderer , renderStyles , renderScripts , renderResourceHints } from '../src/runtime'
3
3
import { normalizeViteManifest , normalizeWebpackManifest } from '../src'
4
+ import { precomputeDependencies } from '../src/precompute'
4
5
5
6
import viteManifest from '../test/fixtures/vite-manifest.json'
6
7
import webpackManifest from '../test/fixtures/webpack-manifest.json'
7
8
import largeViteManifest from './fixtures/large-vite-manifest.json'
8
9
9
10
describe ( 'createRenderer' , ( ) => {
10
- bench ( 'vite' , ( ) => {
11
+ // Precompute dependencies for benchmarks
12
+ const vitePrecomputed = precomputeDependencies ( normalizeViteManifest ( viteManifest ) )
13
+ const webpackPrecomputed = precomputeDependencies ( normalizeWebpackManifest ( webpackManifest ) )
14
+ const largeVitePrecomputed = precomputeDependencies ( normalizeViteManifest ( largeViteManifest ) )
15
+
16
+ bench ( 'vite (manifest)' , ( ) => {
11
17
createRenderer ( ( ) => ( { } ) , {
12
18
manifest : normalizeViteManifest ( viteManifest ) ,
13
19
renderToString : ( ) => '<div>test</div>' ,
14
20
} )
15
21
} )
16
22
17
- bench ( 'webpack' , ( ) => {
23
+ bench ( 'vite (precomputed)' , ( ) => {
24
+ createRenderer ( ( ) => ( { } ) , {
25
+ precomputed : vitePrecomputed ,
26
+ renderToString : ( ) => '<div>test</div>' ,
27
+ } )
28
+ } )
29
+
30
+ bench ( 'webpack (manifest)' , ( ) => {
18
31
createRenderer ( ( ) => ( { } ) , {
19
32
manifest : normalizeWebpackManifest ( webpackManifest ) ,
20
33
renderToString : ( ) => '<div>test</div>' ,
21
34
} )
22
35
} )
23
36
24
- bench ( 'vite (large)' , ( ) => {
37
+ bench ( 'webpack (precomputed)' , ( ) => {
38
+ createRenderer ( ( ) => ( { } ) , {
39
+ precomputed : webpackPrecomputed ,
40
+ renderToString : ( ) => '<div>test</div>' ,
41
+ } )
42
+ } )
43
+
44
+ bench ( 'vite large (manifest)' , ( ) => {
25
45
createRenderer ( ( ) => ( { } ) , {
26
46
manifest : normalizeViteManifest ( largeViteManifest ) ,
27
47
renderToString : ( ) => '<div>test</div>' ,
28
48
} )
29
49
} )
50
+
51
+ bench ( 'vite large (precomputed)' , ( ) => {
52
+ createRenderer ( ( ) => ( { } ) , {
53
+ precomputed : largeVitePrecomputed ,
54
+ renderToString : ( ) => '<div>test</div>' ,
55
+ } )
56
+ } )
30
57
} )
31
58
32
59
describe ( 'rendering' , ( ) => {
60
+ // Precompute dependencies
61
+ const vitePrecomputed = precomputeDependencies ( normalizeViteManifest ( viteManifest ) )
62
+ const webpackPrecomputed = precomputeDependencies ( normalizeWebpackManifest ( webpackManifest ) )
63
+ const largeVitePrecomputed = precomputeDependencies ( normalizeViteManifest ( largeViteManifest ) )
64
+
65
+ // Legacy renderers (with manifest)
33
66
const viteRenderer = createRenderer ( ( ) => ( { } ) , {
34
67
manifest : normalizeViteManifest ( viteManifest ) ,
35
68
renderToString : ( ) => '<div>test</div>' ,
@@ -45,6 +78,22 @@ describe('rendering', () => {
45
78
renderToString : ( ) => '<div>test</div>' ,
46
79
} )
47
80
81
+ // Precomputed renderers
82
+ const vitePrecomputedRenderer = createRenderer ( ( ) => ( { } ) , {
83
+ precomputed : vitePrecomputed ,
84
+ renderToString : ( ) => '<div>test</div>' ,
85
+ } )
86
+
87
+ const webpackPrecomputedRenderer = createRenderer ( ( ) => ( { } ) , {
88
+ precomputed : webpackPrecomputed ,
89
+ renderToString : ( ) => '<div>test</div>' ,
90
+ } )
91
+
92
+ const largeVitePrecomputedRenderer = createRenderer ( ( ) => ( { } ) , {
93
+ precomputed : largeVitePrecomputed ,
94
+ renderToString : ( ) => '<div>test</div>' ,
95
+ } )
96
+
48
97
// Get actual module keys from manifests
49
98
const viteModules = Object . keys ( viteManifest )
50
99
const webpackModules = Object . keys ( webpackManifest )
@@ -58,51 +107,99 @@ describe('rendering', () => {
58
107
const largeViteSet = new Set ( viteModules )
59
108
const largeLargeViteSet = new Set ( largeViteModules . slice ( 0 , 50 ) )
60
109
61
- bench ( 'renderStyles - vite ( small)' , ( ) => {
110
+ bench ( 'renderStyles - vite small (manifest )' , ( ) => {
62
111
renderStyles ( { modules : smallViteSet } , viteRenderer . rendererContext )
63
112
} )
64
113
65
- bench ( 'renderStyles - vite (large)' , ( ) => {
114
+ bench ( 'renderStyles - vite small (precomputed)' , ( ) => {
115
+ renderStyles ( { modules : smallViteSet } , vitePrecomputedRenderer . rendererContext )
116
+ } )
117
+
118
+ bench ( 'renderStyles - vite large (manifest)' , ( ) => {
66
119
renderStyles ( { modules : largeViteSet } , viteRenderer . rendererContext )
67
120
} )
68
121
69
- bench ( 'renderStyles - vite (very large)' , ( ) => {
122
+ bench ( 'renderStyles - vite large (precomputed)' , ( ) => {
123
+ renderStyles ( { modules : largeViteSet } , vitePrecomputedRenderer . rendererContext )
124
+ } )
125
+
126
+ bench ( 'renderStyles - vite very large (manifest)' , ( ) => {
70
127
renderStyles ( { modules : largeLargeViteSet } , largeViteRenderer . rendererContext )
71
128
} )
72
129
73
- bench ( 'renderScripts - vite (small)' , ( ) => {
130
+ bench ( 'renderStyles - vite very large (precomputed)' , ( ) => {
131
+ renderStyles ( { modules : largeLargeViteSet } , largeVitePrecomputedRenderer . rendererContext )
132
+ } )
133
+
134
+ bench ( 'renderScripts - vite small (manifest)' , ( ) => {
74
135
renderScripts ( { modules : smallViteSet } , viteRenderer . rendererContext )
75
136
} )
76
137
77
- bench ( 'renderScripts - vite (large)' , ( ) => {
138
+ bench ( 'renderScripts - vite small (precomputed)' , ( ) => {
139
+ renderScripts ( { modules : smallViteSet } , vitePrecomputedRenderer . rendererContext )
140
+ } )
141
+
142
+ bench ( 'renderScripts - vite large (manifest)' , ( ) => {
78
143
renderScripts ( { modules : largeViteSet } , viteRenderer . rendererContext )
79
144
} )
80
145
81
- bench ( 'renderScripts - vite (very large)' , ( ) => {
146
+ bench ( 'renderScripts - vite large (precomputed)' , ( ) => {
147
+ renderScripts ( { modules : largeViteSet } , vitePrecomputedRenderer . rendererContext )
148
+ } )
149
+
150
+ bench ( 'renderScripts - vite very large (manifest)' , ( ) => {
82
151
renderScripts ( { modules : largeLargeViteSet } , largeViteRenderer . rendererContext )
83
152
} )
84
153
85
- bench ( 'renderResourceHints - vite (small)' , ( ) => {
154
+ bench ( 'renderScripts - vite very large (precomputed)' , ( ) => {
155
+ renderScripts ( { modules : largeLargeViteSet } , largeVitePrecomputedRenderer . rendererContext )
156
+ } )
157
+
158
+ bench ( 'renderResourceHints - vite small (manifest)' , ( ) => {
86
159
renderResourceHints ( { modules : smallViteSet } , viteRenderer . rendererContext )
87
160
} )
88
161
89
- bench ( 'renderResourceHints - vite (large)' , ( ) => {
162
+ bench ( 'renderResourceHints - vite small (precomputed)' , ( ) => {
163
+ renderResourceHints ( { modules : smallViteSet } , vitePrecomputedRenderer . rendererContext )
164
+ } )
165
+
166
+ bench ( 'renderResourceHints - vite large (manifest)' , ( ) => {
90
167
renderResourceHints ( { modules : largeViteSet } , viteRenderer . rendererContext )
91
168
} )
92
169
93
- bench ( 'renderResourceHints - vite (very large)' , ( ) => {
170
+ bench ( 'renderResourceHints - vite large (precomputed)' , ( ) => {
171
+ renderResourceHints ( { modules : largeViteSet } , vitePrecomputedRenderer . rendererContext )
172
+ } )
173
+
174
+ bench ( 'renderResourceHints - vite very large (manifest)' , ( ) => {
94
175
renderResourceHints ( { modules : largeLargeViteSet } , largeViteRenderer . rendererContext )
95
176
} )
96
177
97
- bench ( 'renderStyles - webpack' , ( ) => {
178
+ bench ( 'renderResourceHints - vite very large (precomputed)' , ( ) => {
179
+ renderResourceHints ( { modules : largeLargeViteSet } , largeVitePrecomputedRenderer . rendererContext )
180
+ } )
181
+
182
+ bench ( 'renderStyles - webpack (manifest)' , ( ) => {
98
183
renderStyles ( { modules : smallWebpackSet } , webpackRenderer . rendererContext )
99
184
} )
100
185
101
- bench ( 'renderScripts - webpack' , ( ) => {
186
+ bench ( 'renderStyles - webpack (precomputed)' , ( ) => {
187
+ renderStyles ( { modules : smallWebpackSet } , webpackPrecomputedRenderer . rendererContext )
188
+ } )
189
+
190
+ bench ( 'renderScripts - webpack (manifest)' , ( ) => {
102
191
renderScripts ( { modules : smallWebpackSet } , webpackRenderer . rendererContext )
103
192
} )
104
193
105
- bench ( 'renderResourceHints - webpack' , ( ) => {
194
+ bench ( 'renderScripts - webpack (precomputed)' , ( ) => {
195
+ renderScripts ( { modules : smallWebpackSet } , webpackPrecomputedRenderer . rendererContext )
196
+ } )
197
+
198
+ bench ( 'renderResourceHints - webpack (manifest)' , ( ) => {
106
199
renderResourceHints ( { modules : smallWebpackSet } , webpackRenderer . rendererContext )
107
200
} )
201
+
202
+ bench ( 'renderResourceHints - webpack (precomputed)' , ( ) => {
203
+ renderResourceHints ( { modules : smallWebpackSet } , webpackPrecomputedRenderer . rendererContext )
204
+ } )
108
205
} )
0 commit comments