From a09e6c56cc73dbf056504bbde3eb9a096620c29d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Jun 2025 20:24:49 +0000 Subject: [PATCH 1/2] fix(deps): update dependency google-closure-compiler to v20250624 --- packages/minifiers/package.json | 2 +- pnpm-lock.yaml | 38 ++++++++++++++++----------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/packages/minifiers/package.json b/packages/minifiers/package.json index 2b2f07c2..7e3e1b52 100644 --- a/packages/minifiers/package.json +++ b/packages/minifiers/package.json @@ -11,7 +11,7 @@ "bun": "^1.2.17", "esbuild": "^0.25.5", "find-up": "^7.0.0", - "google-closure-compiler": "^20250623.0.0", + "google-closure-compiler": "^20250624.0.0", "mem": "^9.0.2", "oxc-minify": "^0.75.0", "terser": "^5.43.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff56c413..571b959f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -216,8 +216,8 @@ importers: specifier: ^7.0.0 version: 7.0.0 google-closure-compiler: - specifier: ^20250623.0.0 - version: 20250623.0.0 + specifier: ^20250624.0.0 + version: 20250624.0.0 mem: specifier: ^9.0.2 version: 9.0.2 @@ -4465,57 +4465,57 @@ packages: slash: 3.0.0 dev: true - /google-closure-compiler-java@20250623.0.0: - resolution: {integrity: sha512-GgADK4z4jzYYMK0Y6zdC4kkGCHwyloIjweEzHMvp648LjU7wdGsUhZ9mqGi67NNIvJtHIu3lUNw7GI6ioevA3Q==} + /google-closure-compiler-java@20250624.0.0: + resolution: {integrity: sha512-uxwbLtamw9hd2beDWaqxu49nrd2oEOSluWSdG1Xq3XhgWqi15a7fIU84+CbFV+pT6dMJHzxI+n/pmxVvgPxKfg==} dev: false - /google-closure-compiler-linux-arm64@20250623.0.0: - resolution: {integrity: sha512-TY9tk/lXc9njZKkmo7eR+uQqsKxc4U1ihmS58IO2y8cPXuTcmMz5qcCu5jgsmkY3c4xkAQ093RjSQxARyZ+/iw==} + /google-closure-compiler-linux-arm64@20250624.0.0: + resolution: {integrity: sha512-Hrk8E1VrpubsVrQd7xpasbE8g1PEN6G4NoWZIFbdXNaluZaAHEyAOz3+sCRHdHKsZNE98dtlLTEiUuI+rvoOnw==} cpu: [arm64] os: [linux] requiresBuild: true dev: false optional: true - /google-closure-compiler-linux@20250623.0.0: - resolution: {integrity: sha512-8BrS9ceuu2AQEl07qT3iRT7egqKSBug0V+CDV9kJrL9ufKA0HjOJvKHRpVFY08ofyQbbHPFQWWZJ6X+4niiPZw==} + /google-closure-compiler-linux@20250624.0.0: + resolution: {integrity: sha512-W/9qQhY2ThE4fSskftC+Rhn5uUBL0vFJ+cGojgVyHIRokss0Iqxa4OLAuK9EFIxy1PPMqEOT1WCrD+Lv9I++ZA==} cpu: [x32, x64] os: [linux] requiresBuild: true dev: false optional: true - /google-closure-compiler-macos@20250623.0.0: - resolution: {integrity: sha512-XDRfipNmEID/qT9piZe/qKCg2OhsKBKPB9m0Ab6+go8P3UpmLSs1YLPnXaI2kscV5J4M5fSDhmJAsK7S4GUmXA==} + /google-closure-compiler-macos@20250624.0.0: + resolution: {integrity: sha512-mKcWizDVHrwLdrpAFlDa1d1MHkge7qv6yzDZLzTbc5/DYtnmKoX8vC2uyusHiQz2cEGseG/BzOYIhGvFH0aGcA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: false optional: true - /google-closure-compiler-windows@20250623.0.0: - resolution: {integrity: sha512-ZFulCmwXrbTabZhVK5RGlorUo/RENAoA4mT1bCE9H8w8Y1FeYM1Fj1LP9yot75ED/D1h1PIjYPtQRau/mfuhjw==} + /google-closure-compiler-windows@20250624.0.0: + resolution: {integrity: sha512-ZTHr36+HVe4GCBPlmxzgiHtLUrj2YBy34WlagbhL4ZPgr1X5AXfAo+iIByoHLjQDtywE4dOOHZr0iB5pDLEIEg==} cpu: [x32, x64] os: [win32] requiresBuild: true dev: false optional: true - /google-closure-compiler@20250623.0.0: - resolution: {integrity: sha512-2/yowtbzJl9uUJ8FDRkDYNdU7XaxWLO6adcF7r+Q+SvDxHKxjRyP3JvSqk656IQT5tWvHbxYLNBDCBzqVhf2nw==} + /google-closure-compiler@20250624.0.0: + resolution: {integrity: sha512-wmKc3X2Jo08Z2eDwVLU91A9V2fdNqzUst1/ETshQGb9ITOpRgEKqLCKvSgDy6WTgQozB4r7YSMYwCl/lKPSM/w==} engines: {node: '>=18'} hasBin: true dependencies: chalk: 5.4.1 - google-closure-compiler-java: 20250623.0.0 + google-closure-compiler-java: 20250624.0.0 minimist: 1.2.8 vinyl: 3.0.0 vinyl-sourcemaps-apply: 0.2.1 optionalDependencies: - google-closure-compiler-linux: 20250623.0.0 - google-closure-compiler-linux-arm64: 20250623.0.0 - google-closure-compiler-macos: 20250623.0.0 - google-closure-compiler-windows: 20250623.0.0 + google-closure-compiler-linux: 20250624.0.0 + google-closure-compiler-linux-arm64: 20250624.0.0 + google-closure-compiler-macos: 20250624.0.0 + google-closure-compiler-windows: 20250624.0.0 dev: false /gopd@1.0.1: From e88c29938159e77afac820cb64ed2be7980862ee Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 26 Jun 2025 20:31:04 +0000 Subject: [PATCH 2/2] chore: updated benchmarks --- README.md | 80 +++++++++++++++++++----------------- packages/data/data/data.json | 59 +++++++++++++------------- 2 files changed, 74 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index 4ddb1bed..5095f15b 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ This project benchmarks the following minifiers: | Minifier | Version | Release date โ†“ | | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | -------------- | +| [google-closure-compiler](https://github.com/git+https://github.com/google/closure-compiler-npm.git#master) | [20250624.0.0](https://www.npmjs.com/package/google-closure-compiler/v/20250624.0.0) | 2025-06-26 | | [@swc/core](https://github.com/swc-project/swc) | [1.12.7](https://www.npmjs.com/package/@swc/core/v/1.12.7) | 2025-06-26 | -| [google-closure-compiler](https://github.com/git+https://github.com/google/closure-compiler-npm.git#master) | [20250623.0.0](https://www.npmjs.com/package/google-closure-compiler/v/20250623.0.0) | 2025-06-25 | | [oxc-minify](https://github.com/oxc-project/oxc.git) | [0.75.0](https://www.npmjs.com/package/oxc-minify/v/0.75.0) | 2025-06-25 | | [bun](https://github.com/oven-sh/bun) | [1.2.17](https://www.npmjs.com/package/bun/v/1.2.17) | 2025-06-21 | | [terser](https://github.com/terser/terser) | [5.43.1](https://www.npmjs.com/package/terser/v/5.43.1) | 2025-06-19 | @@ -87,29 +87,29 @@ config: --- xychart-beta title "react v17.0.2" - x-axis ["Original",1,2,3,4,5,6,7,8,9,10,11] + x-axis ["Original",1,2,3,4,5,6,7,8,9,10,11,12] y-axis "Gzip size" 0 --> 19385 - bar [19385,8177,8186,8255,8448,8493,8543,8628,8661,8668,8739,11040] + bar [19385,8177,8186,8216,8255,8448,8493,8543,8628,8661,8668,8739,11040] ```
-| Artifact | Original size | Gzip size | | -| :------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------: | ------------------------------: | --------------------------------: | -| [react v17.0.2](https://www.npmjs.com/package/react/v/17.0.2) ([Source](https://unpkg.com/react@17.0.2/cjs/react.development.js)) | `72.13 kB` | `19.39 kB` | | -| **Minifier** | **Minified size** | **Minzipped size** | **Time** | -| 1. [uglify-js](packages/minifiers/minifiers/uglify-js.ts) | **๐Ÿ†-69% `22.64 kB`** | **๐Ÿ†-58% `8.18 kB`** | *189x* `497 ms` | -| 2. [@swc/core](packages/minifiers/minifiers/swc.ts) | -68% `22.81 kB` | -58% `8.19 kB` | *5x* `14 ms` | -| 3. [terser](packages/minifiers/minifiers/terser.ts) | -68% `23.05 kB` | -57% `8.26 kB` | *104x* `275 ms` | -| 4. [babel-minify](packages/minifiers/minifiers/babel-minify.ts) | -67% `23.60 kB` | -56% `8.45 kB` | *246x* `647 ms` | -| 5. [oxc-minify](packages/minifiers/minifiers/oxc-minify.ts) | -67% `23.52 kB` | -56% `8.49 kB` | *1x* `3 ms` | -| 6. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -67% `23.70 kB` | -56% `8.54 kB` | *4x* `13 ms` | -| 7. [@tdewolff/minify](packages/minifiers/minifiers/tdewolff-minify.ts) | -67% `23.49 kB` | -55% `8.63 kB` | **๐Ÿ† `3 ms`** | -| 8. [bun](packages/minifiers/minifiers/bun.ts) | -67% `23.99 kB` | -55% `8.66 kB` | *5x* `14 ms` | -| 9. [uglify-js (no compress)](packages/minifiers/minifiers/uglify-js.ts) | -65% `25.03 kB` | -55% `8.67 kB` | *34x* `91 ms` | -| 10. [terser (no compress)](packages/minifiers/minifiers/terser.ts) | -65% `25.06 kB` | -55% `8.74 kB` | *44x* `118 ms` | -| 11. [tedivm/jshrink](packages/minifiers/minifiers/jshrink/index.ts) | -43% `40.82 kB` | -43% `11.04 kB` | *46x* `123 ms` | -| 12. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) โŒ Timed out | - | - | :warning: `+10,000 ms` | +| Artifact | Original size | Gzip size | | +| :-------------------------------------------------------------------------------------------------------------------------------- | -------------------------------: | ------------------------------: | ----------------------------: | +| [react v17.0.2](https://www.npmjs.com/package/react/v/17.0.2) ([Source](https://unpkg.com/react@17.0.2/cjs/react.development.js)) | `72.13 kB` | `19.39 kB` | | +| **Minifier** | **Minified size** | **Minzipped size** | **Time** | +| 1. [uglify-js](packages/minifiers/minifiers/uglify-js.ts) | **๐Ÿ†-69% `22.64 kB`** | **๐Ÿ†-58% `8.18 kB`** | *189x* `497 ms` | +| 2. [@swc/core](packages/minifiers/minifiers/swc.ts) | -68% `22.81 kB` | -58% `8.19 kB` | *5x* `14 ms` | +| 3. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -68% `22.84 kB` | -58% `8.22 kB` | *1244x* `3,267 ms` | +| 4. [terser](packages/minifiers/minifiers/terser.ts) | -68% `23.05 kB` | -57% `8.26 kB` | *104x* `275 ms` | +| 5. [babel-minify](packages/minifiers/minifiers/babel-minify.ts) | -67% `23.60 kB` | -56% `8.45 kB` | *246x* `647 ms` | +| 6. [oxc-minify](packages/minifiers/minifiers/oxc-minify.ts) | -67% `23.52 kB` | -56% `8.49 kB` | *1x* `3 ms` | +| 7. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -67% `23.70 kB` | -56% `8.54 kB` | *4x* `13 ms` | +| 8. [@tdewolff/minify](packages/minifiers/minifiers/tdewolff-minify.ts) | -67% `23.49 kB` | -55% `8.63 kB` | **๐Ÿ† `3 ms`** | +| 9. [bun](packages/minifiers/minifiers/bun.ts) | -67% `23.99 kB` | -55% `8.66 kB` | *5x* `14 ms` | +| 10. [uglify-js (no compress)](packages/minifiers/minifiers/uglify-js.ts) | -65% `25.03 kB` | -55% `8.67 kB` | *34x* `91 ms` | +| 11. [terser (no compress)](packages/minifiers/minifiers/terser.ts) | -65% `25.06 kB` | -55% `8.74 kB` | *44x* `118 ms` | +| 12. [tedivm/jshrink](packages/minifiers/minifiers/jshrink/index.ts) | -43% `40.82 kB` | -43% `11.04 kB` | *46x* `123 ms` |
---- @@ -141,7 +141,7 @@ xychart-beta | 1. [uglify-js](packages/minifiers/minifiers/uglify-js.ts) | **๐Ÿ†-67% `57.73 kB`** | **๐Ÿ†-49% `18.57 kB`** | *206x* `1,149 ms` | | 2. [terser](packages/minifiers/minifiers/terser.ts) | -66% `59.01 kB` | -48% `18.69 kB` | *124x* `693 ms` | | 3. [@swc/core](packages/minifiers/minifiers/swc.ts) | -66% `58.42 kB` | -48% `18.75 kB` | *5x* `33 ms` | -| 4. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -66% `58.29 kB` | -48% `18.92 kB` | *645x* `3,594 ms` | +| 4. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -66% `58.29 kB` | -48% `18.92 kB` | *670x* `3,737 ms` | | 5. [babel-minify](packages/minifiers/minifiers/babel-minify.ts) | -66% `59.70 kB` | -47% `19.12 kB` | *262x* `1,465 ms` | | 6. [oxc-minify](packages/minifiers/minifiers/oxc-minify.ts) | -66% `59.52 kB` | -47% `19.26 kB` | *1x* `7 ms` | | 7. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -66% `59.82 kB` | -47% `19.33 kB` | *3x* `21 ms` | @@ -188,7 +188,7 @@ xychart-beta | 8. [babel-minify](packages/minifiers/minifiers/babel-minify.ts) | -68% `92.10 kB` | -62% `31.80 kB` | *304x* `2,398 ms` | | 9. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -69% `90.07 kB` | -62% `31.95 kB` | *4x* `36 ms` | | 10. [bun](packages/minifiers/minifiers/bun.ts) | -68% `92.55 kB` | -61% `32.65 kB` | *3x* `29 ms` | -| 11. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -68% `92.73 kB` | -61% `33.09 kB` | *510x* `4,020 ms` | +| 11. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -68% `92.73 kB` | -61% `33.09 kB` | *527x* `4,154 ms` | | 12. [tedivm/jshrink](packages/minifiers/minifiers/jshrink/index.ts) | -50% `144.14 kB` | -52% `40.88 kB` | *46x* `363 ms` | @@ -223,7 +223,7 @@ xychart-beta | 3. [uglify-js](packages/minifiers/minifiers/uglify-js.ts) | **๐Ÿ†-67% `113.80 kB`** | -52% `43.04 kB` | *168x* `2,206 ms` | | 4. [oxc-minify](packages/minifiers/minifiers/oxc-minify.ts) | -66% `117.25 kB` | -52% `43.36 kB` | *1x* `16 ms` | | 5. [babel-minify](packages/minifiers/minifiers/babel-minify.ts) | -66% `117.90 kB` | -51% `43.93 kB` | *206x* `2,696 ms` | -| 6. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -66% `115.61 kB` | -51% `44.18 kB` | *349x* `4,563 ms` | +| 6. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -66% `115.61 kB` | -51% `44.18 kB` | *354x* `4,637 ms` | | 7. [@tdewolff/minify](packages/minifiers/minifiers/tdewolff-minify.ts) | -66% `117.69 kB` | -51% `44.36 kB` | **๐Ÿ† `13 ms`** | | 8. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -65% `118.14 kB` | -51% `44.37 kB` | *3x* `43 ms` | | 9. [uglify-js (no compress)](packages/minifiers/minifiers/uglify-js.ts) | -63% `126.14 kB` | -50% `44.45 kB` | *27x* `364 ms` | @@ -259,7 +259,7 @@ xychart-beta | [lodash v4.17.21](https://www.npmjs.com/package/lodash/v/4.17.21) ([Source](https://unpkg.com/lodash@4.17.21/lodash.js)) | `544.09 kB` | `96.69 kB` | | | **Minifier** | **Minified size** | **Minzipped size** | **Time** | | 1. [uglify-js](packages/minifiers/minifiers/uglify-js.ts) | **๐Ÿ†-87% `68.17 kB`** | **๐Ÿ†-74% `24.69 kB`** | *147x* `1,689 ms` | -| 2. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -86% `73.50 kB` | -74% `25.02 kB` | *363x* `4,153 ms` | +| 2. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -86% `73.50 kB` | -74% `25.02 kB` | *390x* `4,460 ms` | | 3. [terser](packages/minifiers/minifiers/terser.ts) | -87% `70.41 kB` | -74% `25.15 kB` | *90x* `1,028 ms` | | 4. [@swc/core](packages/minifiers/minifiers/swc.ts) | -87% `69.82 kB` | -74% `25.24 kB` | *4x* `56 ms` | | 5. [babel-minify](packages/minifiers/minifiers/babel-minify.ts) | -87% `72.37 kB` | -74% `25.50 kB` | *182x* `2,083 ms` | @@ -307,7 +307,7 @@ xychart-beta | 7. [@tdewolff/minify](packages/minifiers/minifiers/tdewolff-minify.ts) | -52% `269.35 kB` | -31% `89.88 kB` | **๐Ÿ† `32 ms`** | | 8. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -51% `270.13 kB` | -31% `90.80 kB` | *2x* `69 ms` | | 9. [bun](packages/minifiers/minifiers/bun.ts) | -51% `273.41 kB` | -29% `92.40 kB` | *1x* `49 ms` | -| 10. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -51% `270.32 kB` | -28% `94.17 kB` | *203x* `6,606 ms` | +| 10. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -51% `270.32 kB` | -28% `94.17 kB` | *208x* `6,747 ms` | | 11. [babel-minify](packages/minifiers/minifiers/babel-minify.ts) โŒ Minification | โŒ | โŒ | - | | 12. [tedivm/jshrink](packages/minifiers/minifiers/jshrink/index.ts) โŒ Minification | โŒ | โŒ | - | @@ -345,7 +345,7 @@ xychart-beta | 5. [terser (no compress)](packages/minifiers/minifiers/terser.ts) | -53% `472.58 kB` | -36% `124.25 kB` | *27x* `966 ms` | | 6. [uglify-js (no compress)](packages/minifiers/minifiers/uglify-js.ts) | -53% `472.16 kB` | -36% `124.61 kB` | *22x* `778 ms` | | 7. [@tdewolff/minify](packages/minifiers/minifiers/tdewolff-minify.ts) | -55% `456.59 kB` | -36% `124.89 kB` | **๐Ÿ† `35 ms`** | -| 8. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | **๐Ÿ†-56% `439.97 kB`** | -35% `126.45 kB` | *175x* `6,102 ms` | +| 8. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | **๐Ÿ†-56% `439.97 kB`** | -35% `126.45 kB` | *178x* `6,221 ms` | | 9. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -55% `458.89 kB` | -35% `126.71 kB` | *1x* `60 ms` | | 10. [bun](packages/minifiers/minifiers/bun.ts) | -54% `466.80 kB` | -34% `127.65 kB` | *1x* `42 ms` | | 11. [tedivm/jshrink](packages/minifiers/minifiers/jshrink/index.ts) | -37% `633.71 kB` | -25% `145.18 kB` | *38x* `1,341 ms` | @@ -382,7 +382,7 @@ xychart-beta | 2. [uglify-js](packages/minifiers/minifiers/uglify-js.ts) | **๐Ÿ†-49% `641.59 kB`** | -36% `159.07 kB` | *101x* `5,046 ms` | | 3. [terser](packages/minifiers/minifiers/terser.ts) | -48% `653.18 kB` | -36% `159.17 kB` | *59x* `2,985 ms` | | 4. [oxc-minify](packages/minifiers/minifiers/oxc-minify.ts) | -48% `647.00 kB` | -35% `160.83 kB` | *1x* `57 ms` | -| 5. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -48% `644.52 kB` | -34% `162.77 kB` | *148x* `7,373 ms` | +| 5. [google-closure-compiler](packages/minifiers/minifiers/google-closure-compiler.ts) | -48% `644.52 kB` | -34% `162.77 kB` | *160x* `7,986 ms` | | 6. [uglify-js (no compress)](packages/minifiers/minifiers/uglify-js.ts) | -46% `674.49 kB` | -34% `163.04 kB` | *19x* `994 ms` | | 7. [terser (no compress)](packages/minifiers/minifiers/terser.ts) | -46% `675.43 kB` | -34% `163.18 kB` | *25x* `1,294 ms` | | 8. [esbuild](packages/minifiers/minifiers/esbuild.ts) | -48% `646.76 kB` | -34% `163.73 kB` | *1x* `89 ms` | @@ -559,24 +559,30 @@ xychart-beta > ๐Ÿค– This analysis is AI generated -The JavaScript minification race is over, with 12 intense rounds of shrinking, squeezing, and speeding! Letโ€™s dive into the results to crown the victor and highlight the standout performers. +JavaScript minification battle royale! With twelve grueling rounds testing size and speed across popular npm packages, letโ€™s break down who came out on top and who met an untimely demise. Buckle up! ### Best minifier -**@swc/core** is the undeniable champion for the average user! Consistently delivering the smallest Gzip sizes while maintaining blazing-fast speeds, it dominated crucial roundsโ€”like "echarts" and "typescript"โ€”with results that impressed. For instance, it reduced the monstrous 684.61 kB `echarts` package to just 321.21 kB in **only 614 ms**. It strikes the perfect balance between size and speed, making it ideal for developers who refuse to compromise on either. +**@swc/core** steals the crown in this epic showdown! Why? It boasts a stunning balance of blazing-fast speeds and consistently small gzip sizes. It ranked first numerously on key packages like "echarts," "antd," and "typescript," handling larger bundles with ease. Snappy performance (often sub-second!) makes it an all-around hero, crushing the competition when projects demand speed **and** efficiency. ### Honorable mentions -1. **oxc-minify** โ€” The speed demon! If size isn't your top concern but speed is, oxc-minify crushed it in terms of efficiency. Handling the massive "typescript" package in just 402 ms while staying competitive in size is no small feat. -2. **terser** โ€” The precision specialist. Known for its reliable and thorough compressions, terser consistently landed near the top in Gzip size for most rounds, though it often lagged in speed. Need strict control over your bundle? Terser's got your back. -3. **@tdewolff/minify** โ€” Lightning-fast and lightweight! This tool barely blinked even with heavy hitters like "antd" (825.18 kB), processing it in **just 141 ms**. While its Gzip sizes weren't always chart-topping, its speed makes it an attractive option for smaller projects where rapid workflows shine. -4. **uglify-js** โ€” A compression grandmaster! Despite being slower than modern competitors, uglify-js led with the smallest Gzip sizes in multiple rounds, like "lodash" (24.69 kB) and "d3" (87.02 kB). This is the go-to for perfectionists prioritizing Gzip size over processing time. +1. **uglify-js**: The compression king! In smaller files, such as React and Lodash, uglify-js managed to squeeze out the tightest gzip sizes, reigning supreme in size optimization. However, its abysmal speed (often taking multiple seconds or timing out on larger files) keeps it off the top overall pick for average users. + +2. **oxc-minify**: A rising star! Its hyper-efficient speed (often milliseconds) and respectable size reduction make it a formidable choice for those prioritizing lightning-fast automation in CI/CD pipelines. Perfect for moderately large bundles with a focus on agile projects. + +3. **@tdewolff/minify**: The Usain Bolt of the minification world! While it lagged behind in size reduction compared to leaders, its unmatched processing speed made it the fastest minifier across the board. Ideal for developers needing fast results for prototyping or testing environments. + +4. **terser**: The consistent all-rounder. It doesnโ€™t quite claim gold for speed or size, but itโ€™s solid across every metric. Reliability paired with compatibility and maintainability makes this a good fallback. + +5. **esbuild**: Compact and speedy, esbuild remains an attractive choice for dev-first environments or situations where optimizing for build times matters more than squeezing bytes. While it doesnโ€™t excel in compression, it competes well with robust speeds on mid-sized packages like "lodash" and "antd." ### Eliminated -- **google-closure-compiler**: While it excels at deep optimizations, shockingly slow performance (e.g., 7.3 seconds for "three") and multiple timeouts make it unsuitable for most workflows. Unless youโ€™re chasing absolute minimal size for mission-critical use cases, this one's too unwieldy. -- **babel-minify**: An unfortunate early exit! Crashed during the "d3" round with property access errors. It hasn't been updated in years, and modern ecosystems have left it behind. -- **tedivm/jshrink**: Regex woes derailed its run during the "d3" showdown, exposing limitations in parsing and processing complexity. Itโ€™s best avoided for rigorous minification tasks. -- **bun**: Promising, but still finding its footing. It faltered in post-processing validation against "typescript" due to newline inconsistencies, highlighting immaturity for production-level minification. Needs more polish. +1. **babel-minify**: A tragic fall early on during the "d3" test, encountering fatal errors. Its reliability issues make it untrustworthy for critical production builds. + +2. **tedivm/jshrink**: A regex pattern parsing blunder took it out of the race. This minifier hasn't kept up with evolving JavaScript landscapes. Avoid unless you're programming in the distant past. + +3. **bun**: Sprinted well in initial rounds, but tripped post-validation on "typescript." A deviation in linebreaks highlights potential compatibility flaws for cross-system workflows. -Congratulations to all participants for impressive resultsโ€”even those eliminated taught us valuable lessons. But all hail **@swc/core**, the reigning minifier king! Whether you prioritize efficiency, speed, or size, thereโ€™s something here for everyone. Choose wisely, and may your bundles shrink ever smaller! +An exhilarating contest! Congratulations to @swc/core, which effortlessly blends speed and size to earn its spot as the best all-purpose minifier. Special cheers to uglify-js and oxc-minify for pushing compression boundaries and minimizing with lightning speed, respectively. Whether you're optimizing for performance, size, or compatibility, this roster offers plenty of champions to choose from. What a race! ## Sponsors diff --git a/packages/data/data/data.json b/packages/data/data/data.json index 9f93b9e7..51c8a757 100644 --- a/packages/data/data/data.json +++ b/packages/data/data/data.json @@ -31,6 +31,19 @@ } } }, + "google-closure-compiler": { + "minifierPath": "google-closure-compiler.ts", + "version": "20250624.0.0", + "configHash": "004f9ddc59", + "result": { + "data": { + "minifiedBytes": 22843, + "minzippedBytes": 8216, + "time": 3266.8050894, + "runs": 5 + } + } + }, "terser": { "minifierPath": "terser.ts", "version": "5.43.1", @@ -147,16 +160,6 @@ "runs": 5 } } - }, - "google-closure-compiler": { - "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", - "configHash": "004f9ddc59", - "result": { - "error": { - "message": "timeout" - } - } } } }, @@ -207,13 +210,13 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "data": { "minifiedBytes": 58293, "minzippedBytes": 18923, - "time": 3593.8087578, + "time": 3737.2233874, "runs": 5 } } @@ -462,13 +465,13 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "data": { "minifiedBytes": 92729, "minzippedBytes": 33092, - "time": 4020.2092638000004, + "time": 4154.4874188, "runs": 5 } } @@ -561,13 +564,13 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "data": { "minifiedBytes": 115605, "minzippedBytes": 44184, - "time": 4562.5749602, + "time": 4637.323433799999, "runs": 5 } } @@ -673,13 +676,13 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "data": { "minifiedBytes": 73502, "minzippedBytes": 25022, - "time": 4152.6502798, + "time": 4459.9607346, "runs": 5 } } @@ -941,13 +944,13 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "data": { "minifiedBytes": 270317, "minzippedBytes": 94166, - "time": 6606.0385558, + "time": 6747.206725999999, "runs": 5 } } @@ -1077,13 +1080,13 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "data": { "minifiedBytes": 439974, "minzippedBytes": 126454, - "time": 6101.670455199999, + "time": 6221.4752404, "runs": 5 } } @@ -1201,13 +1204,13 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "data": { "minifiedBytes": 644520, "minzippedBytes": 162771, - "time": 7372.8326218, + "time": 7985.604411, "runs": 5 } } @@ -1427,7 +1430,7 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "error": { @@ -1593,7 +1596,7 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "error": { @@ -1757,7 +1760,7 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "error": { @@ -1893,7 +1896,7 @@ }, "google-closure-compiler": { "minifierPath": "google-closure-compiler.ts", - "version": "20250623.0.0", + "version": "20250624.0.0", "configHash": "004f9ddc59", "result": { "error": {