Benchmarks are gathered on the following minifiers:
If you like this project, please star it & follow me to see what other cool projects I'm working on! ❤️
- Each minifier is executed in its own process
- The measured time is an average taken from 10 consecutive runs
- Each table is sorted by smallest minified size in ascending order
- Each time is annotated with a multiplier relative to the fastest minifier
- "Minzipped size" measures how well the minified file compresses with Gzip
- Comments are not stripped because not all minifiers support it
- Unminified size:
555.8 kB
- Unminified Gzip size:
130.5 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
uglify-js | 🏆-53% 265.4 kB |
🏆-34% 87.3 kB |
81x 8,026ms |
terser | -52% 268.0 kB |
-33% 87.9 kB |
42x 4,155ms |
esbuild | -52% 270.4 kB |
-31% 90.6 kB |
🏆 99ms |
uglify-js.no-compress | -51% 276.1 kB |
-33% 88.7 kB |
13x 1,340ms |
terser.no-compress | -51% 276.5 kB |
-32% 89.2 kB |
17x 1,744ms |
google-closure-compiler.simple | -45% 306.3 kB |
-22% 101.9 kB |
103x 10,172ms |
swc | -17% 463.0 kB |
-10% 117.7 kB |
3x 354ms |
babel-minify Failed | — | — | — |
google-closure-compiler.advanced Failed | — | — | — |
- Unminified size:
287.6 kB
- Unminified Gzip size:
84.7 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
google-closure-compiler.advanced | 🏆-70% 87.4 kB |
-62% 32.5 kB |
199x 8,533ms |
uglify-js | -70% 88.9 kB |
🏆-64% 31.0 kB |
69x 2,980ms |
terser | -69% 90.3 kB |
-64% 31.2 kB |
37x 1,608ms |
esbuild | -69% 90.5 kB |
-63% 32.2 kB |
🏆 43ms |
babel-minify | -68% 92.4 kB |
-63% 31.9 kB |
112x 4,806ms |
uglify-js.no-compress | -68% 94.3 kB |
-63% 31.6 kB |
13x 571ms |
terser.no-compress | -67% 95.0 kB |
-63% 31.9 kB |
14x 620ms |
google-closure-compiler.simple | -67% 96.5 kB |
-60% 34.5 kB |
131x 5,599ms |
swc | -49% 147.8 kB |
-51% 42.4 kB |
1x 81ms |
- Unminified size:
542.6 kB
- Unminified Gzip size:
96.8 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
google-closure-compiler.advanced | 🏆-89% 60.2 kB |
🏆-79% 20.9 kB |
175x 8,411ms |
uglify-js | -88% 69.5 kB |
-75% 24.5 kB |
60x 2,889ms |
terser | -87% 71.2 kB |
-74% 25.2 kB |
36x 1,761ms |
babel-minify | -87% 71.9 kB |
-74% 25.3 kB |
85x 4,112ms |
esbuild | -87% 72.6 kB |
-73% 26.2 kB |
🏆 48ms |
uglify-js.no-compress | -87% 75.2 kB |
-74% 25.8 kB |
11x 571ms |
terser.no-compress | -87% 75.8 kB |
-73% 26.3 kB |
14x 696ms |
google-closure-compiler.simple | -86% 77.4 kB |
-73% 26.3 kB |
117x 5,634ms |
swc | -72% 155.9 kB |
-62% 37.6 kB |
1x 71ms |
- Unminified size:
173.9 kB
- Unminified Gzip size:
36.5 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
uglify-js | 🏆-67% 58.3 kB |
🏆-50% 18.5 kB |
65x 2,094ms |
terser | -66% 59.2 kB |
-49% 18.7 kB |
38x 1,221ms |
babel-minify | -66% 59.2 kB |
-49% 18.8 kB |
91x 2,907ms |
esbuild | -66% 60.0 kB |
-47% 19.4 kB |
🏆 32ms |
google-closure-compiler.simple | -65% 60.9 kB |
-47% 19.7 kB |
157x 5,011ms |
uglify-js.no-compress | -64% 63.0 kB |
-47% 19.5 kB |
11x 380ms |
terser.no-compress | -64% 63.3 kB |
-47% 19.7 kB |
15x 484ms |
swc | -42% 102.4 kB |
-30% 25.9 kB |
1x 48ms |
google-closure-compiler.advanced Failed | — | — | — |
- Unminified size:
72.1 kB
- Unminified Gzip size:
19.5 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
uglify-js | 🏆-69% 22.8 kB |
🏆-58% 8.2 kB |
51x 915ms |
terser | -68% 23.4 kB |
-57% 8.4 kB |
25x 460ms |
babel-minify | -68% 23.8 kB |
-57% 8.5 kB |
68x 1,217ms |
esbuild | -67% 24.0 kB |
-56% 8.7 kB |
1x 19ms |
uglify-js.no-compress | -66% 25.1 kB |
-56% 8.7 kB |
9x 170ms |
terser.no-compress | -65% 25.3 kB |
-55% 8.9 kB |
11x 208ms |
google-closure-compiler.simple | -55% 32.9 kB |
-43% 11.2 kB |
235x 4,194ms |
swc | -42% 42.5 kB |
-42% 11.4 kB |
🏆 18ms |
google-closure-compiler.advanced Failed | — | — | — |
- Unminified size:
868.1 kB
- Unminified Gzip size:
174.2 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
uglify-js | 🏆-54% 407.1 kB |
🏆-34% 115.1 kB |
71x 6,464ms |
terser | -53% 410.5 kB |
-34% 115.2 kB |
40x 3,637ms |
esbuild | -53% 411.6 kB |
-33% 118.0 kB |
🏆 91ms |
uglify-js.no-compress | -52% 422.8 kB |
-34% 116.0 kB |
14x 1,320ms |
terser.no-compress | -52% 424.3 kB |
-34% 116.0 kB |
16x 1,495ms |
google-closure-compiler.simple | -52% 425.2 kB |
-29% 125.3 kB |
94x 8,590ms |
swc | -33% 588.6 kB |
-20% 140.8 kB |
3x 296ms |
babel-minify Failed | — | — | — |
google-closure-compiler.advanced Failed | — | — | — |
- Unminified size:
1.2 MB
- Unminified Gzip size:
249.0 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
uglify-js | 🏆-49% 644.3 kB |
🏆-37% 158.7 kB |
67x 10,069ms |
babel-minify | -49% 645.3 kB |
-36% 161.4 kB |
156x 23,345ms |
esbuild | -49% 647.2 kB |
-35% 163.3 kB |
🏆 150ms |
terser | -48% 653.4 kB |
-37% 159.1 kB |
35x 5,368ms |
google-closure-compiler.simple | -48% 660.1 kB |
-33% 167.1 kB |
77x 11,624ms |
uglify-js.no-compress | -46% 675.4 kB |
-35% 162.9 kB |
12x 1,873ms |
terser.no-compress | -46% 675.6 kB |
-35% 162.9 kB |
15x 2,265ms |
swc | -24% 959.9 kB |
-21% 197.0 kB |
3x 530ms |
google-closure-compiler.advanced Failed | — | — | — |
- Unminified size:
223.2 kB
- Unminified Gzip size:
62.3 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
uglify-js | 🏆-58% 94.2 kB |
🏆-50% 31.2 kB |
54x 2,203ms |
terser | -58% 95.0 kB |
-50% 31.3 kB |
31x 1,265ms |
esbuild | -58% 95.2 kB |
-49% 31.8 kB |
🏆 40ms |
babel-minify | -58% 95.3 kB |
-50% 31.5 kB |
79x 3,214ms |
google-closure-compiler.simple | -56% 99.5 kB |
-47% 33.0 kB |
129x 5,246ms |
uglify-js.no-compress | -55% 101.0 kB |
-49% 32.2 kB |
11x 484ms |
terser.no-compress | -55% 101.3 kB |
-49% 32.2 kB |
13x 548ms |
swc | -40% 134.7 kB |
-39% 38.3 kB |
1x 64ms |
google-closure-compiler.advanced Failed | — | — | — |
Want to see more projects listed? PRs welcome!
UglifyJS takes first place for minification performance, winning 6/8 races and only losing to Google Closure Compiler by less than 9 kB
! What's even more impressive is that it's still written in ES5 but can handle ES6 up to ES2020.
Terser takes a very close second, only short by at most by 1~2%. Terser is a fork of uglify-es and comes with support for ES6+.
esbuild runs 10x+ laps around everyone else! The Go-lang JS minifier/bundler is a beast of its own. Not only is it insanely fast, but demonstrates very competitive minification abilities, usually performing just as well as Terser while supporting cutting-edge ESNext syntax.
⚡️ Pro Tip: Harness the speed of esbuild in your Webpack build for minification (and even transpilation) with esbuild-loader.
Definitely keep an eye out for swc, the JS compiler written in Rust. It's also blazing fast and rumor has it they're stepping up their minification.