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 |
---|---|---|---|
terser | π-52% 268.0 kB |
π-33% 87.9 kB |
36x 2,747ms |
esbuild | -52% 270.4 kB |
-31% 90.6 kB |
π 75ms |
terser.no-compress | -51% 276.5 kB |
-32% 89.2 kB |
16x 1,202ms |
google-closure-compiler.simple | -45% 306.3 kB |
-22% 101.9 kB |
103x 7,786ms |
swc | -18% 459.6 kB |
-11% 116.2 kB |
6x 474ms |
babel-minify Failed | β | β | β |
google-closure-compiler.advanced Failed | β | β | β |
uglify-js Failed | β | β | β |
uglify-js.no-compress 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 |
253x 8,009ms |
uglify-js | -70% 88.9 kB |
π-64% 31.0 kB |
57x 1,826ms |
terser | -69% 90.3 kB |
-64% 31.2 kB |
36x 1,149ms |
esbuild | -69% 90.5 kB |
-63% 32.2 kB |
π 32ms |
babel-minify | -68% 92.4 kB |
-63% 31.9 kB |
101x 3,199ms |
uglify-js.no-compress | -68% 94.3 kB |
-63% 31.6 kB |
11x 377ms |
terser.no-compress | -67% 95.0 kB |
-63% 31.9 kB |
13x 412ms |
google-closure-compiler.simple | -67% 96.5 kB |
-60% 34.5 kB |
131x 4,141ms |
swc | -49% 147.6 kB |
-51% 42.3 kB |
3x 101ms |
- 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 |
223x 6,629ms |
uglify-js | -88% 69.5 kB |
-75% 24.5 kB |
57x 1,704ms |
terser | -87% 71.2 kB |
-74% 25.2 kB |
38x 1,152ms |
babel-minify | -87% 71.9 kB |
-74% 25.3 kB |
88x 2,620ms |
esbuild | -87% 72.6 kB |
-73% 26.2 kB |
π 30ms |
uglify-js.no-compress | -87% 75.2 kB |
-74% 25.8 kB |
11x 344ms |
terser.no-compress | -87% 75.8 kB |
-73% 26.3 kB |
15x 459ms |
google-closure-compiler.simple | -86% 77.4 kB |
-73% 26.3 kB |
133x 3,950ms |
swc | -72% 155.9 kB |
-62% 37.6 kB |
2x 79ms |
- 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 |
61x 1,229ms |
terser | -66% 59.2 kB |
-49% 18.7 kB |
37x 762ms |
babel-minify | -66% 59.2 kB |
-49% 18.8 kB |
85x 1,732ms |
esbuild | -66% 60.0 kB |
-47% 19.4 kB |
π 20ms |
google-closure-compiler.simple | -65% 60.9 kB |
-47% 19.7 kB |
165x 3,340ms |
uglify-js.no-compress | -64% 63.0 kB |
-47% 19.5 kB |
11x 230ms |
terser.no-compress | -64% 63.3 kB |
-47% 19.7 kB |
14x 300ms |
swc | -42% 102.4 kB |
-30% 25.9 kB |
2x 41ms |
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 |
52x 652ms |
terser | -68% 23.4 kB |
-57% 8.4 kB |
26x 328ms |
babel-minify | -68% 23.8 kB |
-57% 8.5 kB |
60x 748ms |
esbuild | -67% 24.0 kB |
-56% 8.7 kB |
π 12ms |
uglify-js.no-compress | -66% 25.1 kB |
-56% 8.7 kB |
9x 116ms |
terser.no-compress | -65% 25.3 kB |
-55% 8.9 kB |
11x 142ms |
google-closure-compiler.simple | -55% 32.9 kB |
-43% 11.2 kB |
214x 2,647ms |
swc | -42% 42.5 kB |
-42% 11.4 kB |
1x 17ms |
google-closure-compiler.advanced Failed | β | β | β |
- Unminified size:
860.3 kB
- Unminified Gzip size:
173.1 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
terser | π-53% 407.2 kB |
π-34% 114.6 kB |
37x 2,156ms |
esbuild | -53% 408.3 kB |
-33% 117.3 kB |
π 57ms |
terser.no-compress | -52% 420.8 kB |
-34% 115.3 kB |
15x 898ms |
google-closure-compiler.simple | -51% 421.8 kB |
-28% 124.7 kB |
109x 6,283ms |
swc | -33% 581.8 kB |
-20% 139.5 kB |
6x 377ms |
babel-minify Failed | β | β | β |
google-closure-compiler.advanced Failed | β | β | β |
uglify-js Failed | β | β | β |
uglify-js.no-compress Failed | β | β | β |
- Unminified size:
1.2 MB
- Unminified Gzip size:
249.0 kB
Minifier | Minified size | Minzipped size | Time |
---|---|---|---|
uglify-js | π-49% 644.5 kB |
π-37% 159.1 kB |
67x 5,783ms |
babel-minify | -49% 645.3 kB |
-36% 161.4 kB |
121x 10,497ms |
esbuild | -49% 647.2 kB |
-35% 163.3 kB |
π 86ms |
terser | -48% 653.4 kB |
-37% 159.1 kB |
35x 3,088ms |
google-closure-compiler.simple | -48% 660.1 kB |
-33% 167.1 kB |
89x 7,712ms |
uglify-js.no-compress | -46% 675.4 kB |
-35% 162.9 kB |
12x 1,081ms |
terser.no-compress | -46% 675.6 kB |
-35% 162.9 kB |
15x 1,338ms |
swc | -24% 958.8 kB |
-22% 196.2 kB |
6x 528ms |
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 |
46x 1,277ms |
terser | -58% 95.0 kB |
-50% 31.3 kB |
25x 707ms |
esbuild | -58% 95.2 kB |
-49% 31.8 kB |
π 28ms |
babel-minify | -58% 95.3 kB |
-50% 31.5 kB |
68x 1,912ms |
google-closure-compiler.simple | -56% 99.5 kB |
-47% 33.0 kB |
123x 3,435ms |
uglify-js.no-compress | -55% 101.0 kB |
-49% 32.2 kB |
10x 279ms |
terser.no-compress | -55% 101.3 kB |
-49% 32.2 kB |
11x 324ms |
swc | -40% 134.6 kB |
-39% 38.2 kB |
1x 50ms |
google-closure-compiler.advanced Failed | β | β | β |
Want to see more projects listed? PRs welcome!
UglifyJS takes first place for minification performance. This is quite impressive as it doesn't support or leverage new and concise ES6+ syntax (hence the failed minifications for "terser v5.5.1").
Terser takes a very close second, only short at most by 1%. Terser is a fork of uglify-es and comes with support for ES6+.
esbuild runs 10x+ laps around everyone else! Nothing comes close to the Go compiled minifier/bundler.
esbuild's minification supports cutting-edge ESNext syntax and performs very competitivelyβonly short at most by 2% from UglifyJs.
β‘οΈ Pro Tip: Harness the speed of esbuild in your Webpack build for minification (and even transpilation) with esbuild-loader.