alexeyraspopov / picocolors

The tiniest and the fastest library for terminal output formatting with ANSI colors
ISC License
1.34k stars 44 forks source link

Update benchmarks for Chalk (and other packages) #45

Closed kytta closed 2 weeks ago

kytta commented 2 years ago

Chalk has got a new version, which is now also dependency-less, lightweight, and fast. cli-color and nanocolors also had updates. In other words, the benchmarks are now very inaccurate :)

A problem one might encounter is that Chalk is now ESM-only, which makes it impossible to use in the current benchmark setup. I've tried a basic bundle using ESBuild, and it works. Here's how:

  1. Clone chalk/chalk
  2. In source/index.js, replace
    • #ansi-styles with ./vendor/ansi-styles/index.js
    • #supports-color with ./vendor/supports-color/index.js
  3. Run npx esbuild source/index.js --outfile=dist/chalk.js --bundle --platform=node
  4. Copy dist/chalk.js to picocolors' repo under benchmarks/chalk.js
  5. Inside ./benchmarks, replace across all files
    • let chalk = require("chalk") with let chalk = require("./chalk").default

I could run the benchmarks on my machine, but it's slower than the one used for README, so I'm not sure if it makes sense for me to send a PR with this data...


P. S. Since many packages still use Chalk v4, I propose adding another line to the benchmarks:

$ node ./benchmarks/size.js 
Data from packagephobia.com
  chalk@4     101 kB
  chalk@5      41 kB
  cli-color   984 kB
  ansi-colors  25 kB
  kleur        21 kB
  colorette    17 kB
  nanocolors   15 kB
+ picocolors    7 kB
alexeyraspopov commented 2 years ago

I'd definitely separate chalk v4 and v5 in the benchmark stats. As for ESM/CJS, it may possibly be easier to make a separate environment for running ESM-first benchmarks

prantlf commented 8 months ago

I implemented @kytta's workaround for ESM-only packages for chalk 5 and yoctocolors in #61. picocolors was dethroned by yoctocolors in the execution speed, but not in module-loading speed yet :-)