🏃♂️🏃♀️🏃 JS minification benchmarks: babel-minify, esbuild, terser, uglify-js, swc, google closure compiler, tdewolff/minify
This repo is routinely maintained to compare the quality and speed across the latest versions of the following JavaScript minifiers:
Benchmarks last updated on Apr 6, 2024.
Minifiers are ranked by smallest minzipped size.
Size of the minified output.
Size of the minified output with Gzip compression.
For minifiers, this measures how compressable the output is.
For users, this measures network transfer size, which is usually the metric that matters most.
How long minification took (average of 5 runs). Each time is annotated with a multiplier relative to the fastest minifier.
Artifact | Original size | Gzip size | |
---|---|---|---|
react v17.0.2 (Source) | 72.14 kB |
19.39 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -68% 22.87 kB |
🏆-58% 8.17 kB |
10x 27 ms |
uglify-js | 🏆-69% 22.67 kB |
-58% 8.18 kB |
182x 480 ms |
google-closure-compiler | -68% 22.83 kB |
-58% 8.19 kB |
1339x 3,521 ms |
terser | -68% 23.14 kB |
-57% 8.32 kB |
98x 258 ms |
babel-minify | -67% 23.60 kB |
-56% 8.45 kB |
248x 652 ms |
esbuild | -67% 23.70 kB |
-56% 8.54 kB |
8x 23 ms |
tdewolff-minify | -67% 23.53 kB |
-56% 8.63 kB |
🏆 3 ms |
bun | -67% 24.01 kB |
-55% 8.65 kB |
8x 22 ms |
uglify-js.no-compress | -65% 25.03 kB |
-55% 8.67 kB |
34x 91 ms |
terser.no-compress | -65% 25.08 kB |
-55% 8.75 kB |
42x 110 ms |
jshrink | -43% 40.82 kB |
-43% 11.04 kB |
45x 121 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
moment v2.29.1 (Source) | 173.90 kB |
36.23 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | 🏆-67% 57.87 kB |
🏆-49% 18.57 kB |
214x 1,104 ms |
swc | -67% 58.21 kB |
-48% 18.69 kB |
9x 52 ms |
terser | -66% 59.16 kB |
-48% 18.69 kB |
121x 624 ms |
google-closure-compiler | -66% 58.27 kB |
-48% 18.91 kB |
687x 3,542 ms |
babel-minify | -66% 59.70 kB |
-47% 19.12 kB |
287x 1,481 ms |
esbuild | -66% 59.82 kB |
-47% 19.33 kB |
3x 19 ms |
tdewolff-minify | -66% 59.95 kB |
-46% 19.49 kB |
🏆 5 ms |
uglify-js.no-compress | -64% 62.50 kB |
-46% 19.57 kB |
40x 211 ms |
terser.no-compress | -64% 63.15 kB |
-46% 19.68 kB |
49x 254 ms |
bun | -64% 61.86 kB |
-45% 19.87 kB |
3x 18 ms |
jshrink | -44% 97.63 kB |
-31% 25.00 kB |
50x 262 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
jquery v3.5.1 (Source) | 287.63 kB |
84.50 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -69% 89.16 kB |
🏆-63% 30.87 kB |
9x 84 ms |
uglify-js | 🏆-69% 88.54 kB |
-63% 30.89 kB |
174x 1,496 ms |
terser | -69% 89.54 kB |
-63% 30.91 kB |
97x 832 ms |
uglify-js.no-compress | -67% 94.08 kB |
-63% 31.47 kB |
34x 296 ms |
tdewolff-minify | -69% 89.85 kB |
-63% 31.47 kB |
🏆 9 ms |
terser.no-compress | -67% 94.55 kB |
-63% 31.62 kB |
41x 351 ms |
babel-minify | -68% 92.10 kB |
-62% 31.80 kB |
280x 2,395 ms |
esbuild | -69% 90.07 kB |
-62% 31.95 kB |
3x 27 ms |
bun | -68% 92.56 kB |
-61% 32.70 kB |
2x 21 ms |
google-closure-compiler | -68% 92.70 kB |
-61% 33.09 kB |
467x 3,992 ms |
jshrink | -50% 144.14 kB |
-52% 40.88 kB |
38x 333 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
vue v2.6.12 (Source) | 342.15 kB |
89.67 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -66% 115.46 kB |
🏆-53% 42.48 kB |
9x 123 ms |
terser | -66% 116.83 kB |
-52% 42.94 kB |
76x 1,022 ms |
uglify-js | 🏆-67% 113.98 kB |
-52% 42.95 kB |
153x 2,063 ms |
babel-minify | -66% 117.90 kB |
-51% 43.93 kB |
200x 2,686 ms |
google-closure-compiler | -66% 115.61 kB |
-51% 44.23 kB |
326x 4,372 ms |
esbuild | -65% 118.14 kB |
-51% 44.37 kB |
2x 32 ms |
tdewolff-minify | -66% 117.81 kB |
-51% 44.38 kB |
🏆 13 ms |
uglify-js.no-compress | -63% 126.14 kB |
-50% 44.45 kB |
25x 346 ms |
terser.no-compress | -63% 126.58 kB |
-50% 44.68 kB |
30x 413 ms |
bun | -64% 121.70 kB |
-49% 45.34 kB |
1x 23 ms |
jshrink | -42% 197.36 kB |
-36% 57.17 kB |
33x 443 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
lodash v4.17.21 (Source) | 544.10 kB |
96.69 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | 🏆-87% 68.24 kB |
🏆-74% 24.66 kB |
146x 1,656 ms |
google-closure-compiler | -86% 73.47 kB |
-74% 24.97 kB |
391x 4,423 ms |
swc | -87% 69.83 kB |
-74% 25.18 kB |
9x 112 ms |
terser | -87% 70.67 kB |
-74% 25.19 kB |
78x 882 ms |
babel-minify | -87% 72.37 kB |
-74% 25.50 kB |
187x 2,113 ms |
uglify-js.no-compress | -86% 74.61 kB |
-73% 25.86 kB |
29x 329 ms |
terser.no-compress | -86% 75.67 kB |
-73% 26.20 kB |
32x 364 ms |
esbuild | -87% 72.48 kB |
-73% 26.20 kB |
2x 34 ms |
tdewolff-minify | -87% 71.90 kB |
-73% 26.50 kB |
🏆 11 ms |
bun | -86% 74.12 kB |
-73% 26.50 kB |
2x 24 ms |
jshrink | -73% 148.78 kB |
-62% 36.33 kB |
30x 345 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
d3 v6.3.1 (Source) | 555.77 kB |
130.69 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | 🏆-53% 263.91 kB |
🏆-33% 87.11 kB |
114x 3,788 ms |
swc | -52% 265.27 kB |
-33% 87.28 kB |
8x 280 ms |
uglify-js.no-compress | -50% 275.35 kB |
-32% 88.32 kB |
21x 698 ms |
terser | -52% 267.90 kB |
-32% 88.34 kB |
64x 2,137 ms |
terser.no-compress | -50% 276.47 kB |
-32% 89.16 kB |
29x 972 ms |
tdewolff-minify | -51% 269.93 kB |
-31% 89.89 kB |
🏆 33 ms |
esbuild | -51% 270.13 kB |
-31% 90.80 kB |
1x 62 ms |
bun | -51% 273.63 kB |
-29% 92.38 kB |
1x 37 ms |
google-closure-compiler | -51% 270.30 kB |
-28% 94.12 kB |
205x 6,834 ms |
babel-minify Failed to minify | — | — | — |
jshrink Invalid output: TypeError | — | — | — |
Artifact | Original size | Gzip size | |
---|---|---|---|
terser v5.30.3 (Source) | 1.01 MB |
193.76 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -55% 455.58 kB |
🏆-36% 123.06 kB |
7x 243 ms |
uglify-js | -55% 451.77 kB |
-36% 123.35 kB |
115x 3,633 ms |
terser | -55% 458.31 kB |
-36% 123.50 kB |
64x 2,043 ms |
terser.no-compress | -53% 474.43 kB |
-36% 124.44 kB |
29x 919 ms |
uglify-js.no-compress | -53% 472.16 kB |
-36% 124.61 kB |
25x 786 ms |
tdewolff-minify | -55% 456.69 kB |
-36% 124.90 kB |
🏆 31 ms |
google-closure-compiler | 🏆-56% 439.95 kB |
-35% 126.56 kB |
193x 6,077 ms |
esbuild | -55% 458.89 kB |
-35% 126.71 kB |
1x 61 ms |
bun | -54% 466.96 kB |
-34% 127.55 kB |
1x 37 ms |
jshrink | -37% 633.71 kB |
-25% 145.18 kB |
40x 1,268 ms |
babel-minify Failed to minify | — | — | — |
Artifact | Original size | Gzip size | |
---|---|---|---|
three v0.124.0 (Source) | 1.25 MB |
248.27 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -48% 642.88 kB |
🏆-36% 158.37 kB |
7x 372 ms |
uglify-js | 🏆-49% 642.22 kB |
-36% 158.91 kB |
101x 4,793 ms |
terser | -48% 653.99 kB |
-36% 159.73 kB |
58x 2,764 ms |
babel-minify | -48% 648.83 kB |
-35% 162.50 kB |
235x 11,122 ms |
google-closure-compiler | -48% 644.45 kB |
-34% 163.00 kB |
161x 7,623 ms |
uglify-js.no-compress | -46% 674.49 kB |
-34% 163.04 kB |
20x 983 ms |
terser.no-compress | -46% 675.60 kB |
-34% 163.23 kB |
25x 1,212 ms |
esbuild | -48% 646.76 kB |
-34% 163.73 kB |
1x 90 ms |
tdewolff-minify | -48% 644.55 kB |
-34% 164.66 kB |
1x 49 ms |
bun | -47% 662.76 kB |
-33% 166.48 kB |
🏆 47 ms |
jshrink | -24% 952.01 kB |
-22% 193.47 kB |
34x 1,638 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
victory v35.8.4 (Source) | 2.14 MB |
309.98 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -67% 707.21 kB |
🏆-49% 157.86 kB |
9x 562 ms |
uglify-js | 🏆-67% 702.67 kB |
-49% 158.22 kB |
110x 6,257 ms |
terser | -66% 715.59 kB |
-49% 158.72 kB |
66x 3,731 ms |
tdewolff-minify | -66% 718.73 kB |
-47% 165.11 kB |
🏆 56 ms |
terser.no-compress | -64% 759.34 kB |
-46% 166.39 kB |
27x 1,530 ms |
uglify-js.no-compress | -65% 756.53 kB |
-46% 167.58 kB |
22x 1,253 ms |
google-closure-compiler | -67% 705.88 kB |
-43% 175.48 kB |
163x 9,241 ms |
esbuild | -66% 724.14 kB |
-42% 181.07 kB |
2x 125 ms |
bun | -66% 728.20 kB |
-41% 182.57 kB |
1x 69 ms |
babel-minify Failed to minify | — | — | — |
jshrink Invalid output: SyntaxError | — | — | — |
Artifact | Original size | Gzip size | |
---|---|---|---|
echarts v5.1.1 (Source) | 3.20 MB |
684.61 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -69% 993.07 kB |
🏆-53% 320.25 kB |
9x 1,059 ms |
terser | -69% 1.00 MB |
-53% 322.11 kB |
50x 5,790 ms |
uglify-js | 🏆-69% 980.14 kB |
-52% 326.77 kB |
93x 10,765 ms |
google-closure-compiler | -69% 991.00 kB |
-52% 328.34 kB |
111x 12,908 ms |
terser.no-compress | -66% 1.07 MB |
-52% 330.74 kB |
22x 2,569 ms |
uglify-js.no-compress | -67% 1.07 MB |
-52% 331.41 kB |
15x 1,758 ms |
esbuild | -68% 1.01 MB |
-52% 331.56 kB |
1x 204 ms |
tdewolff-minify | -68% 1.01 MB |
-52% 331.80 kB |
1x 122 ms |
bun | -68% 1.03 MB |
-51% 337.78 kB |
🏆 116 ms |
babel-minify Timed out | — | — | — |
jshrink Invalid output: TypeError | — | — | — |
Artifact | Original size | Gzip size | |
---|---|---|---|
antd v4.16.1 (Source) | 6.69 MB |
825.54 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | 🏆-68% 2.15 MB |
🏆-45% 452.87 kB |
9x 1,330 ms |
uglify-js | -67% 2.23 MB |
-45% 453.93 kB |
79x 10,998 ms |
terser | -66% 2.25 MB |
-45% 457.82 kB |
47x 6,521 ms |
tdewolff-minify | -66% 2.30 MB |
-43% 472.05 kB |
🏆 138 ms |
terser.no-compress | -64% 2.43 MB |
-42% 475.48 kB |
21x 2,967 ms |
uglify-js.no-compress | -64% 2.42 MB |
-42% 478.57 kB |
17x 2,443 ms |
google-closure-compiler | -66% 2.25 MB |
-42% 482.29 kB |
98x 13,564 ms |
esbuild | -66% 2.31 MB |
-41% 488.28 kB |
2x 294 ms |
bun | -66% 2.30 MB |
-40% 491.75 kB |
1x 143 ms |
jshrink | -33% 4.45 MB |
-24% 626.68 kB |
49x 6,856 ms |
babel-minify Timed out | — | — | — |
Artifact | Original size | Gzip size | |
---|---|---|---|
typescript v5.2.2 (Source) | 8.33 MB |
1.42 MB |
|
Minifier | Minified size | Minzipped size | Time |
swc | 🏆-65% 2.94 MB |
🏆-42% 826.67 kB |
12x 2,936 ms |
terser | -64% 3.00 MB |
-41% 831.28 kB |
60x 14,114 ms |
tdewolff-minify | -64% 3.02 MB |
-40% 848.80 kB |
1x 333 ms |
terser.no-compress | -62% 3.16 MB |
-40% 850.76 kB |
29x 7,004 ms |
uglify-js.no-compress | -62% 3.15 MB |
-40% 857.62 kB |
18x 4,428 ms |
esbuild | -63% 3.07 MB |
-38% 880.56 kB |
1x 453 ms |
bun | -62% 3.13 MB |
-37% 890.55 kB |
🏆 235 ms |
babel-minify Timed out | — | — | — |
google-closure-compiler Timed out | — | — | — |
jshrink Invalid output: TypeError | — | — | — |
uglify-js Timed out | — | — | — |