Skip to content

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

License

privatenumber/minification-benchmarks

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
3464917

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
July 16, 2023 15:29
October 6, 2023 14:45
December 11, 2020 14:48
May 30, 2023 23:25
December 11, 2020 14:48
July 16, 2023 21:39

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

This repo is routinely maintained to compare the quality and speed across the latest versions of the following JavaScript minifiers:

Benchmarks last updated on Dec 2, 2023.


Premium sponsor banner

πŸ™‹β€β™‚οΈ 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.


Premium sponsor banner

πŸ“‹ Results

Artifact Original size Gzip size
react v17.0.2 (Source) 72.14 kB 19.41 kB
Minifier Minified size Minzipped size Time
google-closure-compiler -68% 22.83 kB πŸ†-58% 8.17 kB 792x 3,071 ms
swc -68% 22.87 kB -58% 8.18 kB 5x 21 ms
uglify-js πŸ†-69% 22.67 kB -58% 8.19 kB 135x 525 ms
terser -68% 23.14 kB -57% 8.32 kB 69x 270 ms
babel-minify -67% 23.60 kB -57% 8.43 kB 229x 890 ms
esbuild -67% 23.70 kB -56% 8.53 kB 5x 20 ms
bun -67% 23.98 kB -56% 8.58 kB 5x 21 ms
uglify-js.no-compress -65% 25.03 kB -55% 8.65 kB 24x 96 ms
terser.no-compress -65% 25.08 kB -55% 8.72 kB 32x 125 ms
minify-js -67% 23.46 kB -54% 9.00 kB πŸ† 4 ms
jshrink -43% 40.82 kB -43% 11.00 kB 30x 118 ms
tdewolff-minify Invalid output: SyntaxError β€” β€” β€”

Artifact Original size Gzip size
moment v2.29.1 (Source) 173.90 kB 36.15 kB
Minifier Minified size Minzipped size Time
uglify-js πŸ†-67% 57.87 kB πŸ†-49% 18.46 kB 226x 1,220 ms
swc -67% 58.23 kB -49% 18.57 kB 10x 56 ms
terser -66% 59.16 kB -49% 18.59 kB 130x 699 ms
google-closure-compiler -66% 58.27 kB -48% 18.75 kB 672x 3,615 ms
babel-minify -66% 59.70 kB -47% 19.02 kB 323x 1,739 ms
esbuild -66% 59.82 kB -47% 19.24 kB 4x 25 ms
tdewolff-minify -66% 59.95 kB -46% 19.42 kB πŸ† 5 ms
uglify-js.no-compress -64% 62.50 kB -46% 19.44 kB 41x 222 ms
terser.no-compress -64% 63.15 kB -46% 19.56 kB 55x 298 ms
bun -64% 61.79 kB -46% 19.69 kB 3x 21 ms
minify-js -65% 60.74 kB -42% 20.82 kB 2x 12 ms
jshrink -44% 97.63 kB -31% 24.80 kB 49x 268 ms

Artifact Original size Gzip size
jquery v3.5.1 (Source) 287.63 kB 84.37 kB
Minifier Minified size Minzipped size Time
uglify-js πŸ†-69% 88.54 kB πŸ†-63% 30.85 kB 191x 1,747 ms
swc -69% 89.16 kB -63% 30.86 kB 10x 96 ms
terser -69% 89.54 kB -63% 30.90 kB 108x 992 ms
tdewolff-minify -69% 89.85 kB -63% 31.44 kB πŸ† 9 ms
uglify-js.no-compress -67% 94.08 kB -63% 31.44 kB 34x 314 ms
terser.no-compress -67% 94.55 kB -63% 31.59 kB 44x 407 ms
babel-minify -68% 92.10 kB -62% 31.75 kB 302x 2,756 ms
esbuild -69% 90.07 kB -62% 31.89 kB 5x 47 ms
bun -68% 92.41 kB -62% 32.43 kB 3x 34 ms
google-closure-compiler -68% 92.70 kB -61% 32.98 kB 438x 3,993 ms
minify-js -69% 90.51 kB -61% 33.20 kB 2x 21 ms
jshrink -50% 144.14 kB -52% 40.64 kB 38x 351 ms

Artifact Original size Gzip size
vue v2.6.12 (Source) 342.15 kB 89.52 kB
Minifier Minified size Minzipped size Time
swc -66% 115.46 kB πŸ†-53% 42.40 kB 7x 135 ms
terser -66% 116.83 kB -52% 42.87 kB 65x 1,231 ms
uglify-js πŸ†-67% 113.98 kB -52% 42.89 kB 118x 2,237 ms
babel-minify -66% 117.90 kB -51% 43.83 kB 160x 3,021 ms
google-closure-compiler -66% 115.60 kB -51% 44.05 kB 240x 4,527 ms
esbuild -65% 118.14 kB -51% 44.24 kB 2x 51 ms
uglify-js.no-compress -63% 126.14 kB -50% 44.36 kB 19x 360 ms
tdewolff-minify -66% 117.81 kB -50% 44.39 kB πŸ† 19 ms
terser.no-compress -63% 126.58 kB -50% 44.57 kB 26x 501 ms
bun -64% 121.51 kB -50% 44.98 kB 2x 38 ms
minify-js -64% 121.77 kB -48% 46.72 kB 1x 26 ms
jshrink -42% 197.36 kB -36% 56.87 kB 24x 459 ms

Artifact Original size Gzip size
lodash v4.17.21 (Source) 544.10 kB 96.40 kB
Minifier Minified size Minzipped size Time
uglify-js πŸ†-87% 68.24 kB πŸ†-75% 24.56 kB 114x 1,835 ms
google-closure-compiler -86% 73.47 kB -74% 24.84 kB 268x 4,318 ms
terser -87% 70.67 kB -74% 25.05 kB 66x 1,065 ms
swc -87% 69.83 kB -74% 25.05 kB 6x 106 ms
babel-minify -87% 72.37 kB -74% 25.37 kB 149x 2,402 ms
uglify-js.no-compress -86% 74.61 kB -73% 25.76 kB 20x 336 ms
esbuild -87% 72.48 kB -73% 26.06 kB 1x 32 ms
terser.no-compress -86% 75.67 kB -73% 26.10 kB 27x 448 ms
bun -86% 74.07 kB -73% 26.30 kB 1x 25 ms
tdewolff-minify -87% 71.90 kB -73% 26.40 kB πŸ† 16 ms
jshrink -73% 148.78 kB -63% 36.01 kB 22x 355 ms
minify-js Invalid output: SyntaxError β€” β€” β€”

Artifact Original size Gzip size
d3 v6.3.1 (Source) 555.77 kB 129.99 kB
Minifier Minified size Minzipped size Time
uglify-js -53% 263.91 kB πŸ†-33% 86.73 kB 85x 4,307 ms
swc -52% 265.27 kB -33% 86.91 kB 5x 302 ms
terser -52% 267.91 kB -33% 87.71 kB 55x 2,822 ms
uglify-js.no-compress -50% 275.35 kB -32% 88.30 kB 14x 739 ms
terser.no-compress -50% 276.47 kB -32% 88.99 kB 25x 1,304 ms
tdewolff-minify -51% 269.93 kB -31% 89.68 kB 1x 56 ms
esbuild -51% 270.13 kB -30% 90.41 kB 1x 81 ms
bun -51% 273.42 kB -30% 91.47 kB πŸ† 51 ms
google-closure-compiler -51% 270.30 kB -28% 93.48 kB 135x 6,868 ms
minify-js πŸ†-53% 261.82 kB -26% 95.58 kB 1x 61 ms
babel-minify Failed to minify β€” β€” β€”
jshrink Invalid output: TypeError β€” β€” β€”

Artifact Original size Gzip size
terser v5.24.0 (Source) 993.16 kB 190.42 kB
Minifier Minified size Minzipped size Time
swc -55% 449.79 kB πŸ†-36% 121.30 kB 7x 248 ms
uglify-js -55% 446.16 kB -36% 121.45 kB 120x 3,985 ms
terser -54% 452.57 kB -36% 121.68 kB 78x 2,615 ms
terser.no-compress -53% 468.27 kB -36% 122.59 kB 34x 1,147 ms
uglify-js.no-compress -53% 465.99 kB -36% 122.74 kB 24x 807 ms
tdewolff-minify -55% 450.94 kB -35% 122.90 kB πŸ† 33 ms
google-closure-compiler πŸ†-56% 434.32 kB -35% 124.42 kB 191x 6,338 ms
esbuild -54% 453.18 kB -35% 124.43 kB 1x 66 ms
bun -54% 460.66 kB -34% 125.29 kB 1x 40 ms
jshrink -37% 624.59 kB -25% 142.58 kB 37x 1,250 ms
babel-minify Failed to minify β€” β€” β€”
minify-js Invalid output: SyntaxError β€” β€” β€”

Artifact Original size Gzip size
three v0.124.0 (Source) 1.25 MB 247.75 kB
Minifier Minified size Minzipped size Time
swc -48% 643.00 kB πŸ†-36% 157.66 kB 7x 413 ms
uglify-js πŸ†-49% 642.22 kB -36% 158.26 kB 99x 5,493 ms
terser -48% 654.01 kB -36% 158.95 kB 68x 3,810 ms
babel-minify -48% 648.83 kB -35% 161.70 kB 218x 12,090 ms
google-closure-compiler -48% 644.45 kB -35% 161.84 kB 141x 7,845 ms
uglify-js.no-compress -46% 674.49 kB -35% 162.17 kB 19x 1,104 ms
terser.no-compress -46% 675.60 kB -34% 162.35 kB 30x 1,678 ms
esbuild -48% 646.76 kB -34% 162.65 kB 1x 99 ms
tdewolff-minify -48% 644.55 kB -34% 163.91 kB 2x 124 ms
bun -47% 662.22 kB -33% 164.92 kB πŸ† 55 ms
minify-js -47% 660.81 kB -32% 168.59 kB 1x 100 ms
jshrink -24% 952.01 kB -22% 192.43 kB 30x 1,676 ms

Artifact Original size Gzip size
victory v35.8.4 (Source) 2.14 MB 309.06 kB
Minifier Minified size Minzipped size Time
uglify-js -67% 702.67 kB πŸ†-49% 157.52 kB 112x 6,977 ms
swc -67% 707.83 kB -49% 157.58 kB 9x 609 ms
terser -66% 715.60 kB -49% 158.05 kB 85x 5,307 ms
tdewolff-minify -66% 718.73 kB -47% 164.49 kB πŸ† 62 ms
terser.no-compress -64% 759.34 kB -46% 165.72 kB 34x 2,136 ms
uglify-js.no-compress -65% 756.53 kB -46% 166.88 kB 22x 1,394 ms
minify-js πŸ†-72% 607.42 kB -46% 168.01 kB 2x 144 ms
google-closure-compiler -67% 705.87 kB -44% 174.20 kB 153x 9,469 ms
esbuild -66% 724.14 kB -42% 179.74 kB 2x 142 ms
bun -66% 728.04 kB -41% 181.12 kB 1x 79 ms
babel-minify Failed to minify β€” β€” β€”
jshrink Invalid output: SyntaxError β€” β€” β€”

Artifact Original size Gzip size
echarts v5.1.1 (Source) 3.20 MB 683.47 kB
Minifier Minified size Minzipped size Time
swc -69% 993.30 kB πŸ†-53% 319.69 kB 9x 1,143 ms
terser -69% 1.00 MB -53% 321.40 kB 69x 8,650 ms
uglify-js πŸ†-69% 980.14 kB -52% 326.17 kB 98x 12,162 ms
google-closure-compiler -69% 990.88 kB -52% 327.02 kB 104x 12,876 ms
terser.no-compress -66% 1.07 MB -52% 329.73 kB 32x 3,990 ms
uglify-js.no-compress -67% 1.07 MB -52% 330.46 kB 16x 1,995 ms
esbuild -68% 1.01 MB -52% 330.68 kB 1x 240 ms
tdewolff-minify -68% 1.01 MB -52% 331.33 kB 3x 494 ms
bun -68% 1.03 MB -51% 335.42 kB πŸ† 124 ms
minify-js -69% 1.01 MB -50% 340.93 kB 1x 233 ms
babel-minify Timed out β€” β€” β€”
jshrink Invalid output: TypeError β€” β€” β€”

Artifact Original size Gzip size
antd v4.16.1 (Source) 6.69 MB 825.74 kB
Minifier Minified size Minzipped size Time
swc πŸ†-68% 2.15 MB πŸ†-45% 453.40 kB 8x 1,420 ms
uglify-js -67% 2.23 MB -45% 454.61 kB 76x 12,314 ms
terser -66% 2.25 MB -44% 458.47 kB 61x 9,832 ms
tdewolff-minify -66% 2.30 MB -43% 473.18 kB 1x 282 ms
terser.no-compress -64% 2.43 MB -42% 476.68 kB 27x 4,433 ms
uglify-js.no-compress -64% 2.42 MB -42% 479.73 kB 17x 2,742 ms
esbuild -66% 2.31 MB -41% 488.09 kB 2x 343 ms
bun -66% 2.30 MB -41% 490.83 kB πŸ† 160 ms
jshrink -33% 4.45 MB -24% 625.76 kB 43x 7,003 ms
babel-minify Timed out β€” β€” β€”
google-closure-compiler Timed out β€” β€” β€”
minify-js Invalid output: TypeError β€” β€” β€”

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% 825.86 kB 12x 3,257 ms
tdewolff-minify -64% 3.02 MB -40% 848.30 kB 1x 401 ms
terser.no-compress -62% 3.16 MB -40% 849.70 kB 45x 11,736 ms
uglify-js.no-compress -62% 3.15 MB -40% 856.39 kB 23x 6,162 ms
esbuild -63% 3.07 MB -38% 877.98 kB 2x 523 ms
bun -62% 3.12 MB -37% 886.47 kB πŸ† 260 ms
babel-minify Timed out β€” β€” β€”
google-closure-compiler Timed out β€” β€” β€”
jshrink Invalid output: TypeError β€” β€” β€”
minify-js Failed to minify β€” β€” β€”
terser Timed out β€” β€” β€”
uglify-js Timed out β€” β€” β€”

Sponsors

Premium sponsor banner Premium sponsor banner