This repo is routinely maintained to compare the quality and speed across the latest versions of the following JavaScript minifiers:
This is fork of the original project which shows the benchmark results with more recent versions of the minifiers.
Benchmarks last updated on Apr 23, 2023.
Support this project by βοΈ starring and sharing it. Follow me to see what other cool projects I'm working on! β€οΈ
- To help you pick a minifier that fits your needs
- To promote JS minifiers and document their performances
- To encourage healthy competition and improvement amongst minifiers
- Each minifier is executed in its own process with a 20 second timeout
- Artifact integrity is verified by a test before and after minification
- Minifier upgrade PRs are automated via WhiteSource Renovate
- Benchmarks are gathered on every PR via GitHub Actions (verifiable minified artifacts are uploaded on each run)
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 v18.2.0 (Source) | 87.57 kB |
23.58 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | π-71% 25.24 kB |
π-62% 9.07 kB |
186x 652 ms |
google-closure-compiler | -71% 25.66 kB |
-61% 9.12 kB |
788x 2,761 ms |
swc | -71% 25.82 kB |
-61% 9.20 kB |
9x 34 ms |
terser | -70% 26.15 kB |
-60% 9.33 kB |
94x 330 ms |
babel-minify | -70% 26.65 kB |
-60% 9.41 kB |
293x 1,027 ms |
esbuild | -69% 26.82 kB |
-59% 9.62 kB |
13x 46 ms |
tdewolff-minify | -70% 26.57 kB |
-59% 9.69 kB |
π 3 ms |
uglify-js.no-compress | -68% 28.39 kB |
-59% 9.74 kB |
34x 122 ms |
terser.no-compress | -67% 28.47 kB |
-59% 9.77 kB |
41x 144 ms |
minify-js | -70% 26.50 kB |
-57% 10.13 kB |
2x 7 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
moment v2.29.4 (Source) | 174.60 kB |
36.34 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | π-67% 57.93 kB |
π-49% 18.50 kB |
158x 1,198 ms |
terser | -66% 59.25 kB |
-49% 18.66 kB |
103x 780 ms |
swc | -67% 58.49 kB |
-48% 18.76 kB |
10x 76 ms |
google-closure-compiler | -67% 58.34 kB |
-48% 18.81 kB |
565x 4,278 ms |
babel-minify | -66% 59.79 kB |
-47% 19.09 kB |
275x 2,088 ms |
esbuild | -66% 59.91 kB |
-47% 19.31 kB |
12x 98 ms |
tdewolff-minify | -66% 60.02 kB |
-46% 19.49 kB |
π 8 ms |
uglify-js.no-compress | -64% 62.59 kB |
-46% 19.51 kB |
29x 220 ms |
terser.no-compress | -64% 63.24 kB |
-46% 19.62 kB |
40x 308 ms |
minify-js | -65% 60.82 kB |
-43% 20.88 kB |
2x 18 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
jquery v3.6.4 (Source) | 292.46 kB |
86.00 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | π-70% 88.84 kB |
π-64% 30.95 kB |
153x 1,926 ms |
swc | -69% 89.48 kB |
-64% 30.98 kB |
9x 117 ms |
terser | -69% 89.87 kB |
-64% 31.01 kB |
80x 1,012 ms |
uglify-js.no-compress | -68% 94.40 kB |
-63% 31.55 kB |
24x 306 ms |
tdewolff-minify | -69% 90.18 kB |
-63% 31.58 kB |
π 13 ms |
terser.no-compress | -68% 94.88 kB |
-63% 31.69 kB |
33x 419 ms |
babel-minify | -68% 92.43 kB |
-63% 31.83 kB |
265x 3,336 ms |
esbuild | -69% 90.38 kB |
-63% 32.00 kB |
4x 57 ms |
google-closure-compiler | -68% 93.06 kB |
-62% 33.07 kB |
375x 4,713 ms |
minify-js | -69% 90.76 kB |
-61% 33.32 kB |
2x 30 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
vue v2.7.14 (Source) | 433.74 kB |
102.64 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -69% 135.12 kB |
π-52% 48.83 kB |
8x 166 ms |
terser | -69% 136.53 kB |
-52% 49.21 kB |
82x 1,653 ms |
uglify-js | π-69% 133.02 kB |
-52% 49.26 kB |
133x 2,656 ms |
babel-minify | -68% 137.64 kB |
-51% 50.19 kB |
205x 4,091 ms |
google-closure-compiler | -69% 135.32 kB |
-51% 50.57 kB |
259x 5,184 ms |
esbuild | -68% 138.08 kB |
-51% 50.70 kB |
4x 83 ms |
tdewolff-minify | -68% 137.46 kB |
-51% 50.71 kB |
π 20 ms |
uglify-js.no-compress | -66% 146.40 kB |
-51% 50.77 kB |
20x 405 ms |
terser.no-compress | -66% 146.94 kB |
-50% 50.95 kB |
29x 597 ms |
minify-js | -68% 140.60 kB |
-48% 53.39 kB |
2x 44 ms |
Artifact | Original size | Gzip size | |
---|---|---|---|
lodash v4.17.21 (Source) | 544.09 kB |
96.39 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | π-87% 68.24 kB |
π-75% 24.56 kB |
108x 1,889 ms |
google-closure-compiler | -86% 73.47 kB |
-74% 24.84 kB |
255x 4,457 ms |
swc | -87% 69.83 kB |
-74% 25.05 kB |
6x 113 ms |
terser | -87% 71.05 kB |
-74% 25.07 kB |
64x 1,129 ms |
babel-minify | -87% 72.37 kB |
-74% 25.37 kB |
171x 2,994 ms |
uglify-js.no-compress | -86% 74.61 kB |
-73% 25.76 kB |
20x 358 ms |
esbuild | -87% 72.48 kB |
-73% 26.06 kB |
2x 51 ms |
terser.no-compress | -86% 75.67 kB |
-73% 26.10 kB |
29x 511 ms |
tdewolff-minify | -87% 72.47 kB |
-73% 26.32 kB |
π 17 ms |
minify-js Invalid output: SyntaxError | β | β | β |
Artifact | Original size | Gzip size | |
---|---|---|---|
d3 v7.8.4 (Source) | 586.96 kB |
138.16 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | π-53% 275.20 kB |
π-34% 91.27 kB |
89x 4,952 ms |
swc | -53% 276.97 kB |
-34% 91.69 kB |
6x 386 ms |
terser | -52% 279.49 kB |
-33% 92.29 kB |
71x 3,965 ms |
uglify-js.no-compress | -51% 287.99 kB |
-33% 92.65 kB |
12x 715 ms |
terser.no-compress | -51% 288.89 kB |
-32% 93.39 kB |
27x 1,521 ms |
tdewolff-minify | -52% 281.41 kB |
-32% 93.94 kB |
π 55 ms |
esbuild | -52% 281.74 kB |
-31% 94.86 kB |
2x 139 ms |
google-closure-compiler | -52% 281.96 kB |
-29% 98.17 kB |
136x 7,567 ms |
babel-minify Failed to minify | β | β | β |
minify-js Failed to minify | β | β | β |
Artifact | Original size | Gzip size | |
---|---|---|---|
terser v5.17.1 (Source) | 975.79 kB |
186.60 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -55% 442.51 kB |
π-36% 119.29 kB |
6x 283 ms |
uglify-js | -55% 438.56 kB |
-36% 119.35 kB |
95x 4,237 ms |
terser | -54% 444.84 kB |
-36% 119.57 kB |
68x 3,024 ms |
terser.no-compress | -53% 460.03 kB |
-35% 120.41 kB |
29x 1,286 ms |
uglify-js.no-compress | -53% 457.77 kB |
-35% 120.53 kB |
16x 740 ms |
tdewolff-minify | -55% 443.11 kB |
-35% 120.67 kB |
π 44 ms |
google-closure-compiler | π-56% 427.04 kB |
-35% 121.97 kB |
153x 6,778 ms |
esbuild | -54% 445.35 kB |
-35% 122.18 kB |
2x 102 ms |
babel-minify Failed to minify | β | β | β |
minify-js Invalid output: SyntaxError | β | β | β |
Artifact | Original size | Gzip size | |
---|---|---|---|
three v0.151.3 (Source) | 1.25 MB |
244.64 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | π-50% 623.00 kB |
π-37% 155.30 kB |
7x 429 ms |
uglify-js | -50% 623.99 kB |
-36% 156.38 kB |
99x 5,839 ms |
terser | -49% 632.18 kB |
-36% 156.97 kB |
109x 6,456 ms |
tdewolff-minify | -50% 627.77 kB |
-35% 158.81 kB |
π 59 ms |
uglify-js.no-compress | -47% 655.60 kB |
-35% 159.01 kB |
21x 1,241 ms |
terser.no-compress | -47% 657.22 kB |
-35% 159.38 kB |
31x 1,832 ms |
esbuild | -49% 629.70 kB |
-34% 161.00 kB |
2x 132 ms |
google-closure-compiler | -50% 626.94 kB |
-34% 161.67 kB |
159x 9,387 ms |
babel-minify Failed to minify | β | β | β |
minify-js Failed to minify | β | β | β |
Artifact | Original size | Gzip size | |
---|---|---|---|
victory v36.6.8 (Source) | 2.35 MB |
333.50 kB |
|
Minifier | Minified size | Minzipped size | Time |
uglify-js | -66% 798.94 kB |
π-51% 164.58 kB |
89x 8,324 ms |
terser | -65% 812.74 kB |
-50% 166.35 kB |
71x 6,636 ms |
swc | -65% 811.69 kB |
-50% 168.30 kB |
7x 700 ms |
tdewolff-minify | -65% 817.61 kB |
-48% 173.09 kB |
π 93 ms |
terser.no-compress | -64% 852.84 kB |
-48% 173.52 kB |
27x 2,565 ms |
uglify-js.no-compress | -64% 851.39 kB |
-48% 174.64 kB |
18x 1,730 ms |
minify-js | π-71% 685.65 kB |
-47% 175.34 kB |
2x 197 ms |
google-closure-compiler | -66% 803.67 kB |
-43% 188.96 kB |
126x 11,723 ms |
esbuild | -65% 825.20 kB |
-42% 194.98 kB |
2x 190 ms |
babel-minify Failed to minify | β | β | β |
Artifact | Original size | Gzip size | |
---|---|---|---|
echarts v5.4.2 (Source) | 3.33 MB |
717.18 kB |
|
Minifier | Minified size | Minzipped size | Time |
swc | -69% 1.03 MB |
π-53% 336.66 kB |
7x 1,397 ms |
uglify-js | π-69% 1.02 MB |
-52% 342.91 kB |
76x 13,712 ms |
google-closure-compiler | -69% 1.03 MB |
-52% 344.33 kB |
82x 14,751 ms |
terser.no-compress | -67% 1.12 MB |
-52% 347.54 kB |
27x 4,857 ms |
uglify-js.no-compress | -67% 1.11 MB |
-51% 348.16 kB |
12x 2,153 ms |
esbuild | -68% 1.05 MB |
-51% 348.60 kB |
1x 347 ms |
tdewolff-minify | -68% 1.05 MB |
-51% 348.93 kB |
π 178 ms |
minify-js | -69% 1.05 MB |
-50% 358.81 kB |
1x 307 ms |
babel-minify Timed out | β | β | β |
terser Timed out | β | β | β |
Artifact | Original size | Gzip size | |
---|---|---|---|
typescript v5.0.4 (Source) | 8.11 MB |
1.38 MB |
|
Minifier | Minified size | Minzipped size | Time |
swc | π-64% 2.89 MB |
π-41% 812.55 kB |
6x 3,755 ms |
tdewolff-minify | -64% 2.94 MB |
-40% 827.15 kB |
π 579 ms |
terser.no-compress | -62% 3.08 MB |
-40% 828.99 kB |
25x 14,750 ms |
uglify-js.no-compress | -62% 3.07 MB |
-40% 835.37 kB |
10x 6,336 ms |
esbuild | -63% 3.00 MB |
-38% 856.52 kB |
1x 605 ms |
babel-minify Timed out | β | β | β |
google-closure-compiler Timed out | β | β | β |
minify-js Failed to minify | β | β | β |
terser Timed out | β | β | β |
uglify-js Timed out | β | β | β |
Artifact | Original size | Gzip size | |
---|---|---|---|
antd v5.4.4 (Source) | 8.14 MB |
1.04 MB |
|
Minifier | Minified size | Minzipped size | Time |
babel-minify Invalid output: AssertionError | β | β | β |
esbuild Invalid output: AssertionError | β | β | β |
google-closure-compiler Invalid output: AssertionError | β | β | β |
minify-js Invalid output: AssertionError | β | β | β |
swc Invalid output: AssertionError | β | β | β |
tdewolff-minify Invalid output: AssertionError | β | β | β |
terser.no-compress Invalid output: AssertionError | β | β | β |
terser Invalid output: AssertionError | β | β | β |
uglify-js.no-compress Invalid output: AssertionError | β | β | β |
uglify-js Invalid output: AssertionError | β | β | β |
Want to see more projects listed? PRs welcome! See the contribution guide for more info.