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