picocolors icon indicating copy to clipboard operation
picocolors copied to clipboard

Update benchmarks for Chalk (and other packages)

Open kytta opened this issue 2 years ago • 2 comments

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

kytta avatar Dec 07 '21 12:12 kytta

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

alexeyraspopov avatar Dec 07 '21 14:12 alexeyraspopov

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

prantlf avatar Feb 25 '24 14:02 prantlf