Skip to content

πŸƒβ€β™‚οΈπŸƒβ€β™€οΈπŸƒ JS minification benchmarks: babel-minify, esbuild, terser, uglify-js, swc, google closure compiler, tdewolff/minify

License

Notifications You must be signed in to change notification settings

prantlf/minification-benchmarks

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸƒβ€β™‚οΈπŸƒβ€β™€οΈπŸƒ JS minification benchmarks

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! ❀️

πŸ™‹β€β™‚οΈ Why?

  1. To help you pick a minifier that fits your needs
  2. To promote JS minifiers and document their performances
  3. To encourage healthy competition and improvement amongst minifiers

πŸ‘Ÿ Methodology

  • 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)

⏱ Metrics

Minifiers are ranked by smallest minzipped size.

Minified size

Size of the minified output.

Minzipped size

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.

Time

How long minification took (average of 5 runs). Each time is annotated with a multiplier relative to the fastest minifier.

πŸ“‹ Results

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.

About

πŸƒβ€β™‚οΈπŸƒβ€β™€οΈπŸƒ JS minification benchmarks: babel-minify, esbuild, terser, uglify-js, swc, google closure compiler, tdewolff/minify

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • TypeScript 100.0%