Avatar for the oxc-project user
oxc-project
oxc
Instrumentation
Wall Time
BlogDocsChangelog

feat(minifier): fold array concat chaining

#8440Merged
Comparing
01-11-feat_minifier_fold_array_concat_chaining
(
a4ae450
) with
main
(
d17021c
)
CodSpeed Performance Gauge
-3%
Improvements
0
Regressions
2
Untouched
30
New
0
Dropped
0
Ignored
0

Benchmarks

Failed

minifier[react.development.js]Regression
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier::minifier[react.development.js]
CodSpeed Performance Gauge
-3%
1.8 ms
1.8 ms
minifier[typescript.js]Regression
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier::minifier[typescript.js]
CodSpeed Performance Gauge
-3%
334.6 ms
345.3 ms

Passed

transformer[pdf.mjs]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer::transformer[pdf.mjs]
CodSpeed Performance Gauge
0%
11 ms
10.9 ms
linter[checker.ts]
tasks/benchmark/benches/linter.rs::linter::bench_linter::linter[checker.ts]
CodSpeed Performance Gauge
0%
2.8 s
2.7 s
parser[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/parser.rs::parser::bench_parser::parser[RadixUIAdoptionSection.jsx]
CodSpeed Performance Gauge
0%
86.9 µs
86.8 µs
semantic[cal.com.tsx]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic::semantic[cal.com.tsx]
CodSpeed Performance Gauge
0%
25.9 ms
25.9 ms
transformer[antd.js]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer::transformer[antd.js]
CodSpeed Performance Gauge
0%
55 ms
55 ms
parser[cal.com.tsx]
tasks/benchmark/benches/parser.rs::parser::bench_parser::parser[cal.com.tsx]
CodSpeed Performance Gauge
0%
29.5 ms
29.5 ms
mangler[typescript.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_mangler::mangler[typescript.js]
CodSpeed Performance Gauge
0%
9.6 ms
9.6 ms
codegen_sourcemap[checker.ts]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen::codegen_sourcemap[checker.ts]
CodSpeed Performance Gauge
0%
68.5 ms
68.5 ms
codegen[checker.ts]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen::codegen[checker.ts]
CodSpeed Performance Gauge
0%
25.1 ms
25.1 ms
isolated-declarations[vue-id.ts]
tasks/benchmark/benches/isolated_declarations.rs::transformer::bench_isolated_declarations::isolated-declarations[vue-id.ts]
CodSpeed Performance Gauge
0%
725.3 ms
725.3 ms
transformer[checker.ts]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer::transformer[checker.ts]
CodSpeed Performance Gauge
0%
25 ms
25 ms
lexer[antd.js]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer::lexer[antd.js]
CodSpeed Performance Gauge
0%
22.2 ms
22.2 ms
parser[antd.js]
tasks/benchmark/benches/parser.rs::parser::bench_parser::parser[antd.js]
CodSpeed Performance Gauge
0%
107.1 ms
107.1 ms
linter[cal.com.tsx]
tasks/benchmark/benches/linter.rs::linter::bench_linter::linter[cal.com.tsx]
CodSpeed Performance Gauge
0%
1.1 s
1.1 s
lexer[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer::lexer[RadixUIAdoptionSection.jsx]
CodSpeed Performance Gauge
0%
23.8 µs
23.8 µs
lexer[checker.ts]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer::lexer[checker.ts]
CodSpeed Performance Gauge
0%
13.2 ms
13.2 ms
lexer[cal.com.tsx]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer::lexer[cal.com.tsx]
CodSpeed Performance Gauge
0%
5.5 ms
5.5 ms
parser[checker.ts]
tasks/benchmark/benches/parser.rs::parser::bench_parser::parser[checker.ts]
CodSpeed Performance Gauge
0%
53.9 ms
53.9 ms
linter[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/linter.rs::linter::bench_linter::linter[RadixUIAdoptionSection.jsx]
CodSpeed Performance Gauge
0%
2.6 ms
2.6 ms
parser[pdf.mjs]
tasks/benchmark/benches/parser.rs::parser::bench_parser::parser[pdf.mjs]
CodSpeed Performance Gauge
0%
17.5 ms
17.5 ms
lexer[pdf.mjs]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer::lexer[pdf.mjs]
CodSpeed Performance Gauge
0%
3.6 ms
3.6 ms
semantic[antd.js]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic::semantic[antd.js]
CodSpeed Performance Gauge
0%
104.9 ms
104.9 ms
transformer[cal.com.tsx]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer::transformer[cal.com.tsx]
CodSpeed Performance Gauge
0%
34.9 ms
34.9 ms
semantic[checker.ts]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic::semantic[checker.ts]
CodSpeed Performance Gauge
0%
64.2 ms
64.2 ms
mangler[antd.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_mangler::mangler[antd.js]
CodSpeed Performance Gauge
0%
6 ms
6 ms
semantic[pdf.mjs]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic::semantic[pdf.mjs]
CodSpeed Performance Gauge
0%
17.3 ms
17.3 ms
semantic[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic::semantic[RadixUIAdoptionSection.jsx]
CodSpeed Performance Gauge
0%
72.9 µs
73 µs
mangler[react.development.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_mangler::mangler[react.development.js]
CodSpeed Performance Gauge
0%
139.2 µs
139.6 µs
transformer[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer::transformer[RadixUIAdoptionSection.jsx]
CodSpeed Performance Gauge
-1%
145.1 µs
146.6 µs
minifier[antd.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier::minifier[antd.js]
CodSpeed Performance Gauge
-3%
191.1 ms
196.9 ms

Commits

Click on a commit to change the comparison range
Base
main
d17021c
-3%
feat(minifier): fold array concat chaining (#8440) Compress `[].concat(a).concat(b)` into `[].concat(a, b)`. **References** - [Spec of `Array::concat`](https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.concat) --- ### The new assumption I added a new assumption description in `crates/oxc_minifier/README.md`: "Errors thrown when creating a String or an Array that exceeds the maximum length can disappear or moved". This is an assumption held by other minifiers. Without this assumption, we have to treat `+` and array creation/update to have a sideeffect and that limits the minification. For input: ```js [...Array(Number(2n ** 32n - 1n)),""] " ".repeat(Number(2n ** 29n - 24n - 1n)) + ' ' export {} ``` (Note that `2 ** 32 - 1` is the max array length and `2 ** 29 - 24` is the max string length on V8.) This code errors with too long array and too long string on V8 based runtimes. terser outputs: ```js Array(Number(2n**32n-1n))," ".repeat(Number(536870887n));export{}; ``` No error will happen with this code. SWC outputs: ```js [...Array(Number(2n**32n-1n))]," ".repeat(Number(2n**29n-24n-1n));export{}; ``` No error will happen with this code. [playground](https://play.swc.rs/?version=1.10.7&code=H4sIAAAAAAAAA4vW09NzLCpKrNTwK81NSi3SMMpT0NJSMAZSugqGeZqaOkpKsbxcSgpKekWpBamJJajqjCxB6oxMYKoVtBXUFdR5uVIrCvKLShSqa3m5AGRqy%2FBiAAAA&config=H4sIAAAAAAAAA32UO3LjMAyG%2B5zCozrFjostcoDtcgYOTYIyvXxoCNCxJuO7L0RJtjeG3En48AMkAOL7bbfrTmi6j903f%2FLPoAtCuf2zBcdE%2BsKWDkzUaIofqHtf6Qkn5HRAaKbrTDrSpQdqKtz%2F2u8XRRdyRlgViy365N34mNPkOBRAfLCxlUPWCInwf%2F3CSv6aAJX6aD%2FkHECnF0RpVD4R9FCkwCaHoAcEddZFiDKdVBePWUoxwUpg1VDyIPJkPfmcOOcztaCtMtmCgHwBQ%2F4MkoxzsSwhX0%2B4T8MWDrXvW59%2FqOGsQ9Uk5IRLawmfVoh6zB5JuZqkEs5wowYzXIr7U%2BmdKkC1pGfdKfu00ZO%2FAFyBoBGTjiDFbR6O52lL7V4qfXI8sjQKnOdbumWCnouqvHdCZafKQCEvdbOArQamyhrpOAveKB96Cwqc41kRQuOXJ3OUktI4QHYC4P5qJ03VDNTtFW7w6UG8wH%2F4liQP2OIRNR23KY7xkMOLBBHomO0LB24F5W1ceEtchm1ekwUeDbCiS8UGnpcAPwDKKrR9%2BTQb%2FDw4oupDPtzXxOJwve3hqFN%2Ff%2B%2FzKn5bHLqYbW1wWfJTf%2BfV%2FLu7O61beD1B5%2FFzFbac13%2FKOhgeLwYAAA%3D%3D) esbuild outputs: ```js [...Array(Number(2n**32n-1n))]," ".repeat(Number(2n**29n-24n-1n))+"";export{}; ``` No error will happen with this code. [esbuild try](https://esbuild.github.io/try/#dAAwLjI0LjIALS1taW5pZnkAWy4uLkFycmF5KE51bWJlcigybiAqKiAzMm4gLSAxbikpLCIiXQoiICIucmVwZWF0KE51bWJlcigybiAqKiAyOW4gLSAyNG4gLSAxbikpICsgJyAnCmV4cG9ydCB7fQ) OXC outputs: ```js [...Array(Number(2n**32n-1n))]," ".repeat(Number(2n**29n-24n-1n))+" ";export{}; ``` The array error won't happen and the String error will happen with this code. [playground](https://playground.oxc.rs/#eNpVT71OwzAQfhXrlv4QIhpgIBtLR8SOGZxwCUH22To7baMo746dNEVMd5/u+7sRaijhI8/zV2Y1bN96UyFvCxL7vXiM414caLfLJEj4lCRBSMgZHarwn1u8JG7xtCrEndiIjSS8OMtBjJMkyMBCOQL3lIYfKKgLlIF7zEB3FKBslPYR+No6XC9+MJXVKwqsyDeWzZU8ZeAUe+TZ0vZc47HTSMpEAwjoQ/7jY7JjjKQTvitG8n/ilDuL437zXtyC4hZjKUBfPByeITJq+4UtpvoRmI66plu4tTUpIRovNc/fXcx2qr69YRS1+opmJwps9VHbc9KfkCvr43npNU2/v/WIsw==)
a4ae450
2 months ago
by sapphi-red
© 2025 CodSpeed Technology
Home Terms PrivacyDocs