privatenumber/minification-benchmarks

Là một dự án frontend, privatenumber/minification-benchmarks đã đạt 1.6k sao trên GitHub, ngôn ngữ TypeScript. 🏃♂️🏃♀️🏃 JS minification benchmarks: babel-minify, esbuild, terser, uglify-js, swc, google closure compiler, tdewolff/minify, oxc-minify
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
Snapshot
Cộng tác viên hàng đầu
Xem cộng tác viên hàng đầu
minification benchmarks
What's the best JavaScript minifier?
This project benchmarks the following minifiers:
| Minifier | Version | Release date ↓ |
|---|---|---|
| oxc-minify | 0.141.0 | 2026-07-21 |
| @swc/core | 1.15.46 | 2026-07-19 |
| terser | 5.49.0 | 2026-07-08 |
| esbuild | 0.28.1 | 2026-06-11 |
| bun | 1.3.14 | 2026-05-13 |
| google-closure-compiler | 20251216.0.0 | 2025-12-18 |
| @tdewolff/minify | 2.24.8 | 2025-12-08 |
| @cminify/cminify-linux-x64 | 3.0.1 | 2025-07-27 |
| uglify-js | 3.19.3 | 2024-08-29 |
| babel-minify | 0.5.2 | 2022-05-06 |
| tedivm/jshrink | 1.8.1 |
Benchmarks last updated on Jul 24, 2026.
🙋♂️ Why?
- 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
👟 Methodology
- Each minifier is executed in its own process with a 10s timeout
- Artifact integrity is verified by a test before and after minification
- Each minifier is minimally configured (sourcemaps & comments disabled), comparing out-of-the-box experience
- Minifier upgrade PRs are automated via WhiteSource Renovate
- Benchmarks are updated on every PR via GitHub Actions
- The raw benchmark data is available in
/packages/data/data/data.json
⏱ Metrics
Ranking
For each benchmark, minifiers are ranked by a score that reflects the best balance of trade-offs.
The score combines minzipped size and minification time, with size weighted more heavily by default (85% size, 15% time) since it's usually the top priority. If a minifier is unusually slow, the weights shift toward time using a logistic sigmoid function, up to a 50/50 split. This avoids harsh cutoffs while still penalizing extreme slowness.
Both size and time are scaled using min-max normalization so they can be compared fairly. The result is a context-aware score that helps surface the best overall choice—but make sure to check each column directly if size or speed matters more to you.
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
[!TIP] What's the verdict? ⚔️ See the Minifier showdown
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| react v17.0.2 (Source) | 72.13 KB | 19.39 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -68% 22.82 KB | -58% 8.19 KB | 6x 18 ms |
| 2. oxc-minify | -68% 23.15 KB | -57% 8.36 KB | 🏆 3 ms |
| 3. terser | -68% 23.05 KB | -57% 8.26 KB | 71x 199 ms |
| 4. uglify-js | 🏆-69% 22.64 KB | 🏆-58% 8.18 KB | 151x 420 ms |
| 5. esbuild | -67% 23.70 KB | -56% 8.54 KB | 6x 18 ms |
| 6. @tdewolff/minify | -67% 23.49 KB | -55% 8.63 KB | 1x 4 ms |
| 7. bun | -67% 23.98 KB | -55% 8.66 KB | 5x 15 ms |
| 8. uglify-js (no compress) | -65% 25.03 KB | -55% 8.67 KB | 27x 75 ms |
| 9. terser (no compress) | -65% 25.06 KB | -55% 8.74 KB | 30x 84 ms |
| 10. google-closure-compiler | -68% 22.81 KB | -58% 8.22 KB | 1139x 3,169 ms |
| 11. @cminify/cminify-linux-x64 | -44% 40.04 KB | -44% 10.86 KB | 4x 12 ms |
| 12. tedivm/jshrink | -43% 40.82 KB | -43% 11.04 KB | 45x 126 ms |
| 13. babel-minify ❌ Failed to find | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| moment v2.29.1 (Source) | 173.90 KB | 36.23 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -66% 58.37 KB | -48% 18.75 KB | 3x 26 ms |
| 2. terser | -66% 59.01 KB | -48% 18.69 KB | 65x 478 ms |
| 3. oxc-minify | -66% 59.37 KB | -47% 19.24 KB | 1x 7 ms |
| 4. esbuild | -66% 59.80 KB | -47% 19.33 KB | 2x 21 ms |
| 5. uglify-js | 🏆-67% 57.73 KB | 🏆-49% 18.57 KB | 123x 906 ms |
| 6. @tdewolff/minify | -66% 59.89 KB | -46% 19.48 KB | 🏆 7 ms |
| 7. uglify-js (no compress) | -64% 62.50 KB | -46% 19.57 KB | 24x 177 ms |
| 8. terser (no compress) | -64% 63.01 KB | -46% 19.65 KB | 28x 208 ms |
| 9. bun | -64% 61.76 KB | -45% 19.85 KB | 2x 17 ms |
| 10. google-closure-compiler | -66% 58.28 KB | -48% 18.90 KB | 545x 3,994 ms |
| 11. @cminify/cminify-linux-x64 | -45% 95.93 KB | -32% 24.74 KB | 1x 12 ms |
| 12. tedivm/jshrink | -44% 97.63 KB | -31% 25.00 KB | 39x 285 ms |
| 13. babel-minify ❌ Failed to find | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| jquery v3.5.1 (Source) | 287.63 KB | 84.50 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -69% 89.16 KB | 🏆-63% 30.86 KB | 3x 46 ms |
| 2. oxc-minify | -69% 89.24 KB | -63% 30.93 KB | 1x 12 ms |
| 3. @tdewolff/minify | -69% 89.68 KB | -63% 31.45 KB | 🏆 12 ms |
| 4. terser | -69% 89.24 KB | -63% 30.86 KB | 56x 661 ms |
| 5. uglify-js (no compress) | -67% 94.08 KB | -63% 31.47 KB | 20x 244 ms |
| 6. terser (no compress) | -67% 94.26 KB | -63% 31.56 KB | 23x 271 ms |
| 7. esbuild | -69% 90.07 KB | -62% 31.96 KB | 3x 37 ms |
| 8. bun | -68% 92.39 KB | -61% 32.64 KB | 2x 23 ms |
| 9. uglify-js | 🏆-69% 88.45 KB | -63% 30.90 KB | 114x 1,336 ms |
| 10. google-closure-compiler | -68% 92.71 KB | -61% 33.05 KB | 345x 4,028 ms |
| 11. @cminify/cminify-linux-x64 | -51% 141.45 KB | -52% 40.37 KB | 1x 14 ms |
| 12. tedivm/jshrink | -50% 144.14 KB | -52% 40.88 KB | 30x 361 ms |
| 13. babel-minify ❌ Failed to find | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| vue v2.6.12 (Source) | 342.15 KB | 89.67 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -66% 115.53 KB | 🏆-52% 42.71 KB | 3x 58 ms |
| 2. oxc-minify | -66% 116.98 KB | -52% 43.25 KB | 1x 17 ms |
| 3. terser | -66% 116.60 KB | -52% 42.87 KB | 57x 854 ms |
| 4. @tdewolff/minify | -66% 117.70 KB | -51% 44.37 KB | 🏆 15 ms |
| 5. esbuild | -65% 118.14 KB | -51% 44.37 KB | 2x 44 ms |
| 6. uglify-js (no compress) | -63% 126.14 KB | -50% 44.45 KB | 20x 302 ms |
| 7. terser (no compress) | -63% 126.39 KB | -50% 44.64 KB | 24x 356 ms |
| 8. bun | -65% 121.28 KB | -49% 45.39 KB | 1x 24 ms |
| 9. uglify-js | 🏆-67% 113.80 KB | -52% 43.04 KB | 125x 1,857 ms |
| 10. google-closure-compiler | -66% 115.55 KB | -51% 44.24 KB | 324x 4,789 ms |
| 11. @cminify/cminify-linux-x64 | -43% 193.91 KB | -37% 56.36 KB | 1x 15 ms |
| 12. tedivm/jshrink | -42% 197.36 KB | -36% 57.17 KB | 32x 481 ms |
| 13. babel-minify ❌ Failed to find | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| lodash v4.17.21 (Source) | 544.09 KB | 96.69 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -87% 69.82 KB | -74% 25.24 KB | 3x 46 ms |
| 2. oxc-minify | -87% 70.91 KB | -73% 25.87 KB | 🏆 12 ms |
| 3. esbuild | -87% 72.50 KB | -73% 26.20 KB | 2x 30 ms |
| 4. uglify-js (no compress) | -86% 74.61 KB | -73% 25.86 KB | 23x 271 ms |
| 5. terser | -87% 70.41 KB | -74% 25.15 KB | 62x 729 ms |
| 6. @tdewolff/minify | -87% 71.90 KB | -73% 26.50 KB | 1x 17 ms |
| 7. bun | -87% 73.45 KB | -72% 26.66 KB | 1x 22 ms |
| 8. terser (no compress) | -86% 75.04 KB | -73% 26.19 KB | 27x 314 ms |
| 9. uglify-js | 🏆-87% 68.17 KB | 🏆-74% 24.69 KB | 120x 1,394 ms |
| 10. google-closure-compiler | -86% 73.49 KB | -74% 25.03 KB | 368x 4,283 ms |
| 11. @cminify/cminify-linux-x64 | -73% 146.27 KB | -63% 35.94 KB | 1x 13 ms |
| 12. tedivm/jshrink | -73% 148.78 KB | -62% 36.33 KB | 32x 374 ms |
| 13. babel-minify ❌ Failed to find | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| d3 v6.3.1 (Source) | 555.77 KB | 130.69 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -52% 265.03 KB | -33% 87.39 KB | 5x 129 ms |
| 2. oxc-minify | -52% 267.20 KB | -33% 87.95 KB | 1x 37 ms |
| 3. uglify-js (no compress) | -50% 275.35 KB | -32% 88.32 KB | 26x 617 ms |
| 4. @tdewolff/minify | -52% 269.07 KB | -31% 89.87 KB | 1x 36 ms |
| 5. terser (no compress) | -50% 276.13 KB | -32% 89.07 KB | 37x 885 ms |
| 6. esbuild | -51% 270.21 KB | -31% 90.81 KB | 3x 71 ms |
| 7. terser | -52% 267.42 KB | -33% 88.00 KB | 79x 1,852 ms |
| 8. uglify-js | 🏆-53% 263.56 KB | 🏆-33% 87.02 KB | 139x 3,272 ms |
| 9. bun | -51% 272.73 KB | -29% 92.35 KB | 2x 48 ms |
| 10. @cminify/cminify-linux-x64 | -29% 393.70 KB | -21% 103.81 KB | 🏆 23 ms |
| 11. google-closure-compiler | -51% 270.32 KB | -28% 94.15 KB | 266x 6,241 ms |
| 12. babel-minify ❌ Minification | ❌ | ❌ | - |
| 13. tedivm/jshrink ❌ Minification | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| terser v5.30.3 (Source) | 1.01 MB | 193.76 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. oxc-minify | 🏆-56% 439.27 KB | 🏆-37% 121.99 KB | 1x 36 ms |
| 2. @swc/core | -55% 455.45 KB | -36% 123.29 KB | 5x 115 ms |
| 3. @tdewolff/minify | -55% 456.59 KB | -36% 124.88 KB | 1x 34 ms |
| 4. terser (no compress) | -53% 472.58 KB | -36% 124.25 KB | 38x 805 ms |
| 5. uglify-js (no compress) | -53% 472.16 KB | -36% 124.61 KB | 32x 670 ms |
| 6. esbuild | -55% 458.93 KB | -35% 126.71 KB | 2x 60 ms |
| 7. terser | -55% 456.59 KB | -36% 123.35 KB | 85x 1,771 ms |
| 8. bun | -54% 466.69 KB | -34% 127.64 KB | 2x 43 ms |
| 9. uglify-js | -55% 451.19 KB | -36% 123.33 KB | 152x 3,153 ms |
| 10. google-closure-compiler | -56% 439.93 KB | -35% 126.44 KB | 292x 6,042 ms |
| 11. @cminify/cminify-linux-x64 | -38% 625.93 KB | -26% 144.30 KB | 🏆 21 ms |
| 12. tedivm/jshrink | -37% 633.71 KB | -25% 145.18 KB | 64x 1,328 ms |
| 13. babel-minify ❌ Minification | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| three v0.124.0 (Source) | 1.25 MB | 248.27 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -48% 642.75 KB | 🏆-36% 158.73 KB | 7x 176 ms |
| 2. oxc-minify | -48% 642.46 KB | -36% 159.88 KB | 2x 52 ms |
| 3. esbuild | -48% 646.93 KB | -34% 163.75 KB | 3x 86 ms |
| 4. @tdewolff/minify | -49% 642.20 KB | -34% 164.60 KB | 2x 49 ms |
| 5. uglify-js (no compress) | -46% 674.49 KB | -34% 163.04 KB | 38x 872 ms |
| 6. terser | -48% 653.18 KB | -36% 159.17 KB | 105x 2,414 ms |
| 7. terser (no compress) | -46% 675.43 KB | -34% 163.18 KB | 46x 1,075 ms |
| 8. bun | -47% 655.59 KB | -33% 166.17 KB | 2x 63 ms |
| 9. uglify-js | 🏆-49% 641.59 KB | -36% 159.07 KB | 188x 4,320 ms |
| 10. google-closure-compiler | -48% 644.51 KB | -34% 162.81 KB | 338x 7,766 ms |
| 11. @cminify/cminify-linux-x64 | -25% 941.06 KB | -23% 191.97 KB | 🏆 23 ms |
| 12. tedivm/jshrink | -24% 952.01 KB | -22% 193.47 KB | 74x 1,712 ms |
| 13. babel-minify ❌ Timed out | - | - | :warning: +10,000 ms |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| victory v35.8.4 (Source) | 2.13 MB | 309.94 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. @swc/core | -67% 705.90 KB | -49% 157.73 KB | 5x 244 ms |
| 2. oxc-minify | -67% 710.90 KB | -48% 160.84 KB | 1x 72 ms |
| 3. @tdewolff/minify | -66% 716.62 KB | -47% 164.95 KB | 1x 69 ms |
| 4. uglify-js (no compress) | -65% 756.53 KB | -46% 167.58 KB | 25x 1,105 ms |
| 5. terser (no compress) | -65% 756.62 KB | -46% 166.18 KB | 31x 1,374 ms |
| 6. terser | -67% 712.87 KB | -49% 158.46 KB | 77x 3,359 ms |
| 7. esbuild | -66% 725.65 KB | -42% 181.23 KB | 3x 135 ms |
| 8. bun | -66% 726.80 KB | -41% 182.61 KB | 1x 85 ms |
| 9. uglify-js | 🏆-67% 694.78 KB | 🏆-49% 157.44 KB | 131x 5,712 ms |
| 10. @cminify/cminify-linux-x64 | -33% 1.43 MB | -29% 221.12 KB | 🏆 44 ms |
| 11. babel-minify ❌ Minification | ❌ | ❌ | - |
| 12. google-closure-compiler ❌ Timed out | - | - | :warning: +10,000 ms |
| 13. tedivm/jshrink ❌ Post-validation | ❌ | ❌ | - |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| echarts v5.1.1 (Source) | 3.20 MB | 684.61 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. oxc-minify | -69% 1.00 MB | -53% 323.07 KB | 3x 152 ms |
| 2. @swc/core | 🏆-69% 993.62 KB | 🏆-53% 321.08 KB | 10x 526 ms |
| 3. @tdewolff/minify | -68% 1.01 MB | -52% 331.76 KB | 2x 120 ms |
| 4. esbuild | -68% 1.01 MB | -52% 331.62 KB | 3x 186 ms |
| 5. bun | -68% 1.02 MB | -51% 337.87 KB | 2x 134 ms |
| 6. uglify-js (no compress) | -67% 1.07 MB | -52% 331.41 KB | 31x 1,582 ms |
| 7. terser (no compress) | -67% 1.07 MB | -52% 330.35 KB | 50x 2,496 ms |
| 8. terser | -69% 998.45 KB | -53% 321.56 KB | 111x 5,534 ms |
| 9. @cminify/cminify-linux-x64 | -45% 1.77 MB | -37% 434.45 KB | 🏆 50 ms |
| 10. babel-minify ❌ Timed out | - | - | :warning: +10,000 ms |
| 11. google-closure-compiler ❌ Timed out | - | - | :warning: +10,000 ms |
| 12. tedivm/jshrink ❌ Minification | ❌ | ❌ | - |
| 13. uglify-js ❌ Timed out | - | - | :warning: +10,000 ms |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| antd v4.16.1 (Source) | 6.67 MB | 825.18 KB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. oxc-minify | 🏆-68% 2.12 MB | 🏆-45% 451.56 KB | 3x 255 ms |
| 2. @swc/core | -68% 2.15 MB | -45% 452.47 KB | 9x 692 ms |
| 3. @tdewolff/minify | -66% 2.29 MB | -43% 471.64 KB | 1x 140 ms |
| 4. esbuild | -65% 2.31 MB | -41% 488.41 KB | 3x 286 ms |
| 5. bun | -66% 2.30 MB | -40% 491.71 KB | 2x 179 ms |
| 6. uglify-js (no compress) | -64% 2.42 MB | -42% 478.57 KB | 32x 2,313 ms |
| 7. terser (no compress) | -64% 2.42 MB | -42% 474.97 KB | 39x 2,835 ms |
| 8. terser | -66% 2.24 MB | -45% 457.35 KB | 85x 6,153 ms |
| 9. @cminify/cminify-linux-x64 | -34% 4.43 MB | -24% 623.37 KB | 🏆 72 ms |
| 10. babel-minify ❌ Timed out | - | - | :warning: +10,000 ms |
| 11. google-closure-compiler ❌ Timed out | - | - | :warning: +10,000 ms |
| 12. tedivm/jshrink ❌ Timed out | - | - | :warning: +10,000 ms |
| 13. uglify-js ❌ Timed out | - | - | :warning: +10,000 ms |
| Artifact | Original size | Gzip size | |
|---|---|---|---|
| typescript v4.9.5 (Source) | 10.95 MB | 1.88 MB | |
| Minifier | Minified size | Minzipped size | Time |
| 1. oxc-minify | -70% 3.33 MB | 🏆-55% 852.78 KB | 4x 531 ms |
| 2. @tdewolff/minify | -69% 3.35 MB | -54% 875.77 KB | 2x 266 ms |
| 3. @swc/core | 🏆-70% 3.31 MB | -54% 859.06 KB | 14x 1,544 ms |
| 4. esbuild | -68% 3.49 MB | -51% 915.54 KB | 4x 475 ms |
| 5. bun | -68% 3.54 MB | -51% 923.27 KB | 2x 317 ms |
| 6. uglify-js (no compress) | -68% 3.54 MB | -53% 876.54 KB | 33x 3,631 ms |
| 7. terser (no compress) | -68% 3.53 MB | -53% 878.64 KB | 44x 4,773 ms |
| 8. @cminify/cminify-linux-x64 | -47% 5.85 MB | -40% 1.13 MB | 🏆 108 ms |
| 9. babel-minify ❌ Timed out | - | - | :warning: +10,000 ms |
| 10. google-closure-compiler ❌ Timed out | - | - | :warning: +10,000 ms |
| 11. tedivm/jshrink ❌ Timed out | - | - | :warning: +10,000 ms |
| 12. terser ❌ Timed out | - | - | :warning: +10,000 ms |
| 13. uglify-js ❌ Timed out | - | - | :warning: +10,000 ms |
⚔️ Minifier showdown
[!NOTE] 🤖 This analysis is AI generated. See below for the system prompt.
The Minification Grand Prix: 12 Rounds of Byte-Shaving Mayhem
Twelve npm packages. Eleven contenders. One goal: crush code down to its smallest, fastest-loading form without breaking a sweat—or the syntax. From the featherweight "react" to the typescript behemoth clocking in at nearly 2 megabytes, this race had everything. Early sprinters flamed out, a couple of veterans refused to compromise on size no matter the time cost, and one newcomer quietly lapped the field as the packages got heavier. Let's break down who deserves the podium.
Best minifier
@swc/core takes the crown, and it wasn't close once you factor in the whole picture. Look at the pattern: round after round, it either wins outright on compression or sits within a rounding error of the winner—while doing it in milliseconds, not seconds. On "jquery," "vue," "three," and "echarts," @swc/core delivered the single smallest gzip output and did it fast enough to be labeled "most balanced" nearly every time. That's not a fluke, that's a system.
Compare that to uglify-js, which absolutely wins on raw compression in several rounds—"moment," "lodash," "d3," "victory"—but at a brutal cost. On "victory" alone, uglify-js took 5.7 seconds to shave a bit more fat than the field. On "d3," 3.2 seconds for a 33% cut that oxc-minify essentially matched in 37 milliseconds. That's an 88x time penalty for marginal gains. In a CI pipeline running thousands of builds a day, that's not dedication—that's a bottleneck.
@swc/core proved you don't have to choose. It's consistently top-tier on size and finishes its work before slower tools have finished loading their config files.
Honorable mentions
oxc-minify is the breakout star of the back half of this race. As packages ballooned into the hundreds of kilobytes and beyond, oxc-minify started winning outright—"terser," "antd," "typescript"—all while running at speeds that make uglify-js look like it's minifying by hand. On "typescript," it shaved 55% off nearly 2MB in just 531ms. That's the kind of scaling that matters when your bundle isn't a toy example.
@tdewolff/minify is the speed demon's speed demon. It topped the "fastest" category in almost every single round, often finishing in single-digit milliseconds even on large payloads, and its compression, while rarely table-topping, was never embarrassing—usually within 1-3% of the leaders. If your CI cares about wall-clock time above all, this is your dark horse.
@cminify/cminify-linux-x64 deserves a nod purely for consistency of speed on huge files—routinely the fastest or near-fastest on anything over 100KB—even though its compression ratios lagged well behind the leaders (that "d3" result, 21% shaved versus uglify's 33%, shows the gap widens on gnarlier code).
terser held its own in the early lightweight rounds as a dependable, slightly-slower-but-still-respectable middle-of-the-pack performer—no disasters, no fireworks, just steady work.
Eliminated
babel-minify — Crashed out at the very first hurdle on "react," tripped up by a stale internal browser-data dependency throwing a JSON parsing error. Never got off the starting line.
tedivm/jshrink — Made it through five rounds respectably, then choked on "d3" with an unclosed regex pattern exception. A hard crash on real-world code is a hard no for production use, regardless of how it performed before that.
Closing remarks
What a card. The story of this race is really the story of a shifting frontier: uglify-js reminding us that raw compression obsession still has fans willing to pay in seconds, while @swc/core and oxc-minify prove that modern tooling can deliver both speed and squeeze without forcing you to pick a side. @tdewolff/minify and @cminify show there's real appetite for tools that prioritize throughput above all else. Numbers don't lie, but they also don't tell you everything—installation footprint, plugin ecosystems, and how a tool handles your particular edge-case syntax still matter enormously. Take these results as a strong compass, not gospel, and pick the minifier that matches the shape of your actual pipeline, not just the podium finish.
System prompt
Today's date is 2026-07-24
You are a JavaScript minification benchmark analyst with a flair for storytelling.
## Objective
Analyze JavaScript minifiers based strictly on benchmark data: *minified Gzip size* and *minification speed*.
Present your findings as an entertaining and intuitive commentary, helping readers understand performance trade-offs even if they aren't familiar with kilobytes, milliseconds, or compression ratios.
Your job is to narrate the race—not just display the scoreboard.
## Rules of Engagement
1. Compare only what's measured: Evaluate each minifier based solely on Gzip size and speed. Avoid assumptions about correctness, compatibility, or code quality unless failures are explicitly shown in the results.
2. Crown the winner:
- Prioritize smallest Gzip size (transfer time matters most).
- Consider speed—especially where compression is close. A 10× faster tool with ~1% worse compression might be more practical for CI pipelines.
- Bigger source = harder challenge. Reward outstanding performance on large artifacts.
- Trade-offs are key. Highlight where a tool sacrifices speed for size (or vice versa), and who manages both impressively.
3. Context matters:
- These benchmarks only capture performance. Real-world adoption also depends on DX: install size, API design, community, etc. Mention that—briefly—but do not evaluate it.
- If a tool stands out only in niche scenarios, note it.
- If a tool fails validation or breaks input code, eliminate it and warn accordingly.
## Output format
- Tone: Energetic, cheeky, and dramatic—like a live commentator at a niche sporting event. No emojis.
- Style: Short, connected sentences. Prioritize flow over bullet lists, except for eliminations.
- Audience: Readers who want *practical insight* from raw benchmark data—without needing to decode gzip math or performance charts.
## Output structure & example
```md
<Quick intro — set the tone. Comment on how fierce or surprising the field was.>
Three... two... one... compress! Welcome to the Minification Grand Prix, where bytes are sliced, milliseconds count, and no semicolon is safe. This year's lineup is ferocious, blending familiar veterans with some clever debutants. The competition? Gritty as ever. The stakes? Astronomical. Let’s see who rises to the top of the minification hierarchy!
### Best minifier
<Name the top performer and justify it. Consider consistency, trade-offs, and standout moments. Call out how hard the decision was if close.>
### Honorable mentions
<Concisely highlight specific tools that impressed in size, speed, or balance. Mention exciting newcomers or quietly consistent performers.>
### Eliminated
<List of disqualified minifiers, each with a quick reason (e.g., crash, invalid output, critical bug). Be clear but diplomatic.>
### Closing remarks
<Closing remarks — Concisely celebrate the competition, acknowledge that DX and correctness also matter, and encourage readers to explore what fits their workflow.>
```
# Minifiers
- babel-minify v0.5.2 released 2022-05-06
- bun v1.3.14 released 2026-05-13
- @cminify/cminify-linux-x64 v3.0.1 released 2025-07-27
- esbuild v0.28.1 released 2026-06-11
- google-closure-compiler v20251216.0.0 released 2025-12-18
- tedivm/jshrink v1.8.1
- oxc-minify v0.141.0 released 2026-07-21
- @swc/core v1.15.46 released 2026-07-19
- @tdewolff/minify v2.24.8 released 2025-12-08
- terser v5.49.0 released 2026-07-08
- uglify-js v3.19.3 released 2024-08-29
# Race results
## Round 1: npm package "react" (19.39 KB gzipped)
- Best gzip compression: uglify-js: 8.18 KB (58% shaved) in 420 ms
- Fastest: oxc-minify: 8.36 KB (57% shaved) in 3 ms
- Most balanced: @swc/core: 8.19 KB (58% shaved) in 18 ms
- Honorable mention: terser: 8.26 KB (57% shaved) in 199 ms
## Round 2: npm package "moment" (36.23 KB gzipped)
- Best gzip compression: uglify-js: 18.57 KB (49% shaved) in 906 ms
- Fastest: @tdewolff/minify: 19.48 KB (46% shaved) in 7 ms
- Most balanced: @swc/core: 18.75 KB (48% shaved) in 26 ms
- Honorable mention: terser: 18.69 KB (48% shaved) in 478 ms
## Round 3: npm package "jquery" (84.50 KB gzipped)
- Best gzip compression: @swc/core: 30.86 KB (63% shaved) in 46 ms
- Fastest: @tdewolff/minify: 31.45 KB (63% shaved) in 12 ms
- Most balanced: @swc/core: 30.86 KB (63% shaved) in 46 ms
- Honorable mention: oxc-minify: 30.93 KB (63% shaved) in 12 ms
## Round 4: npm package "vue" (89.67 KB gzipped)
- Best gzip compression: @swc/core: 42.71 KB (52% shaved) in 58 ms
- Fastest: @tdewolff/minify: 44.37 KB (51% shaved) in 15 ms
- Most balanced: @swc/core: 42.71 KB (52% shaved) in 58 ms
- Honorable mention: oxc-minify: 43.25 KB (52% shaved) in 17 ms
## Round 5: npm package "lodash" (96.69 KB gzipped)
- Best gzip compression: uglify-js: 24.69 KB (74% shaved) in 1,394 ms
- Fastest: oxc-minify: 25.87 KB (73% shaved) in 12 ms
- Most balanced: @swc/core: 25.24 KB (74% shaved) in 46 ms
- Honorable mention: esbuild: 26.20 KB (73% shaved) in 30 ms
## Round 6: npm package "d3" (130.69 KB gzipped)
- Best gzip compression: uglify-js: 87.02 KB (33% shaved) in 3,272 ms
- Fastest: @cminify/cminify-linux-x64: 103.81 KB (21% shaved) in 23 ms
- Most balanced: @swc/core: 87.39 KB (33% shaved) in 129 ms
- Honorable mention: oxc-minify: 87.95 KB (33% shaved) in 37 ms
## Round 7: npm package "terser" (193.76 KB gzipped)
- Best gzip compression: oxc-minify: 121.99 KB (37% shaved) in 36 ms
- Fastest: @cminify/cminify-linux-x64: 144.30 KB (26% shaved) in 21 ms
- Most balanced: oxc-minify: 121.99 KB (37% shaved) in 36 ms
- Honorable mention: @swc/core: 123.29 KB (36% shaved) in 115 ms
## Round 8: npm package "three" (248.27 KB gzipped)
- Best gzip compression: @swc/core: 158.73 KB (36% shaved) in 176 ms
- Fastest: @cminify/cminify-linux-x64: 191.97 KB (23% shaved) in 23 ms
- Most balanced: @swc/core: 158.73 KB (36% shaved) in 176 ms
- Honorable mention: oxc-minify: 159.88 KB (36% shaved) in 52 ms
## Round 9: npm package "victory" (309.94 KB gzipped)
- Best gzip compression: uglify-js: 157.44 KB (49% shaved) in 5,712 ms
- Fastest: @cminify/cminify-linux-x64: 221.12 KB (29% shaved) in 44 ms
- Most balanced: @swc/core: 157.73 KB (49% shaved) in 244 ms
- Honorable mention: oxc-minify: 160.84 KB (48% shaved) in 72 ms
## Round 10: npm package "echarts" (684.61 KB gzipped)
- Best gzip compression: @swc/core: 321.08 KB (53% shaved) in 526 ms
- Fastest: @cminify/cminify-linux-x64: 434.45 KB (37% shaved) in 50 ms
- Most balanced: oxc-minify: 323.07 KB (53% shaved) in 152 ms
- Honorable mention: @tdewolff/minify: 331.76 KB (52% shaved) in 120 ms
## Round 11: npm package "antd" (825.18 KB gzipped)
- Best gzip compression: oxc-minify: 451.56 KB (45% shaved) in 255 ms
- Fastest: @cminify/cminify-linux-x64: 623.37 KB (24% shaved) in 72 ms
- Most balanced: oxc-minify: 451.56 KB (45% shaved) in 255 ms
- Honorable mention: @swc/core: 452.47 KB (45% shaved) in 692 ms
## Round 12: npm package "typescript" (1.88 MB gzipped)
- Best gzip compression: oxc-minify: 852.78 KB (55% shaved) in 531 ms
- Fastest: @cminify/cminify-linux-x64: 1.13 MB (40% shaved) in 108 ms
- Most balanced: oxc-minify: 852.78 KB (55% shaved) in 531 ms
- Honorable mention: @tdewolff/minify: 875.77 KB (54% shaved) in 266 ms
# Eliminated
## babel-minify
Failed "react" in undefined stage:
"Failed to find JSON start:\n[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`"
## tedivm/jshrink
Failed "d3" in minification stage:
"RuntimeException: Unclosed regex pattern at position: 289075 in /packages/minifiers/vendor/tedivm/jshrink/src/JShrink/Minifier.php:660"
Sponsors
Repo liên quan
Storybook is a frontend workshop maintained at storybookjs/storybook. It renders UI components and pages in isolation from your main application. Core renderers include React, Angular, Vue 3, Web Components, HTML, Ember, Svelte, and Preact, plus React Native and community support for Qwik and SolidJS. It's released under the MIT license.
webpack is a module bundler that packs JavaScript, CSS, images, and other assets into a controlled number of output bundles, using loaders to preprocess file types and a plugin system to hook into the build. It's MIT-licensed and maintained on GitHub, with code splitting built in to keep initial load times down.
freeCodeCamp is a free, self-paced curriculum for learning to code, published as open source at freeCodeCamp/freeCodeCamp. It's a 501(c)(3) nonprofit funded by donor support, structured around six certifications in its Full-Stack Developer Curriculum, each gated by required projects instead of open-book quizzes. The repository also carries beta language certifications for developers, interview-prep resources, and the code that runs the live freecodecamp.org platform.
Vue 2, also known as Vue.js 2, is the earlier major version of the Vue JavaScript framework, hosted at vuejs/vue on GitHub under an MIT license. Per the repository's own README, Vue 2 hit End of Life on December 31, 2023, is no longer actively maintained, and the project now directs users toward vuejs/core (Vue 3) and an official migration guide, while leaving Vue 2 itself installable through CDNs, package managers, and GitHub.
Trả lời nhanh
Đọc thêm về privatenumber/minification-benchmarks ở đâu?
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/privatenumber/minification-benchmarks là nguồn chính thức.
privatenumber/minification-benchmarks có bao nhiêu sao?
privatenumber/minification-benchmarks có 1.6k sao GitHub — tải lại trang để xem số mới nhất, hoặc xem trực tiếp github.com/privatenumber/minification-benchmarks. TopGit phản chiếu số sao của GitHub nhưng không cam kết đến từng phút.
privatenumber/minification-benchmarks có phải mã nguồn mở không?
Có — privatenumber/minification-benchmarks phát hành theo license MIT, nghĩa là mã nguồn mở để đọc, fork và (tùy license) tái sử dụng. Mã: github.com/privatenumber/minification-benchmarks.
privatenumber/minification-benchmarks còn đang phát triển không?
Commit gần nhất trên privatenumber/minification-benchmarks là 24 ngày trước (theo timestamp GitHub). Repo có 36 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
privatenumber/minification-benchmarks là gì?
privatenumber/minification-benchmarks (privatenumber/minification-benchmarks) là dự án TypeScript trên GitHub. Theo mô tả gốc: 🏃♂️🏃♀️🏃 JS minification benchmarks: babel-minify, esbuild, terser, uglify-js, swc, google closure compiler, tdewolff/minify, oxc-minify
privatenumber/minification-benchmarks so với các dự án Frontend khác thế nào?
privatenumber/minification-benchmarks được TopGit xếp vào nhóm Frontend, với 1.6k sao GitHub và viết bằng TypeScript. Xem trang chủ đề Frontend trên TopGit để so sánh với các dự án tương tự theo số sao và mức độ hoạt động.
Đọc đầy đủ README ở tab phía trên.
Chưa chắc minification-benchmarks có hợp với bạn?
Để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm bên dưới và xem AI nói gì về minification-benchmarks.