其中名气最大的是 chalk
, 绚丽多彩的颜色组合.
但, 如果仅仅只需要 通用色彩的功能 来说, https://bundlephobia.com/result?p=chalk
chalk
无疑是 过大了
当然这里主要是讲它们的速度比较
我们用turbocolor 的基准比较, 作为我们例子
作者这样做的目的, 当然是为了表明它的快
# turbocolor bench 包结构
readme.md # 说明如何运行,与结果报告
index.js # 基准-bench文件 ❤️
package.json # 建立独立的包依赖
const { Suite } = require("benchmark") // 基准测试的库
console.log("# Load Time")
console.time("chalk")
const chalk = require("chalk")
console.timeEnd("chalk")
console.time("kleur")
const kleur = require("kleur")
console.timeEnd("kleur")
console.time("ansi-colors")
const ansi = require("ansi-colors")
console.timeEnd("ansi-colors")
console.time("turbocolor")
const turbocolor = require("..")
console.timeEnd("turbocolor")
// 上面是展示 初始化的时间
const styles = Object.keys(turbocolor.Styles) // 因为 turbocolor 旨在 只提供 通用的色彩, 来达到 尺寸与速度 上的优势
// 所以, 基准测试 基于 turbocolor 具有的颜色数组 上
const bench = ({ testables, tests }) =>
Object.keys(tests)
.map(name => ({
name,
test: Object.keys(testables).reduce(
// 3
(bench, id) => bench.add(id, tests[name].bind({}, testables[id])),
// 1
new Suite().on("cycle", ({ target: { name, hz } }) =>
// 2
console.log(`${name} × ${Math.floor(hz).toLocaleString()} ops/sec`)
)
)
}))
//4
.map(({ name, test }) => (console.log(`\n# ${name}`), test.run()))
这里是作者定义的基准测试的通用函数, 这里就用到 benchmark
库的API
简单说明一下:
那些
Object map reduce
之类 就不会讲的
1. new Suite()
- 官方例子中 初始化 管理基准流程的 API 官方库例子
2. Suite().on("cycle",funArgs)
- 订阅 周期 函数
funArgs
就是 ({target: {name, hz}}) //...
,作者描述 哪个库 一秒 多少个周期
3. bench.add
- 为Suite
添加 基准测试 函数
原生数组
reduce
的函数表明, 一开始bench
===new Suite的定义
4. test.run()
- 在前面的订阅/添加测试, 后需要通过, 确切的 run
函数 来启动测试
就是
chalk,
kleur,
"ansi-colors": ansi,
turbocolor
每个都运行turbocolor
的同色彩函数
类比上面, 但是 链状的函数定义 运行
类比上面, 嵌套/混合函数 颜色输出
bench({
testables: {
chalk,
kleur,
"ansi-colors": ansi,
turbocolor
},
tests: {
"Using Styles": c => styles.map(k => c[k]("foo")),
"Chaining Styles": c => styles.map(k => c[k].italic.underline.bold("bar")),
"Nesting Styles": ({
red,
cyan,
green,
blue,
bold,
magenta,
white,
bgBlue,
yellow
}) =>
green(
`GREEN, ${blue(
`BLUE, ${bold(
`BOLD AND ${green("GREEN")}. BACK TO BLUE, ${red.italic.underline(
`RED ITALIC UNDERLINE,`
)}`
)} MORE BLUE, ${magenta(
`MAGENTA, ${white.inverse("INVERSE WHITE,")}${cyan(
` CYAN, ${bgBlue.black(
`BLACK ON BLUE, ${yellow.bold.inverse(
"BLUE ON BOLD YELLOW"
)}, BLACK ON BLUE`
)}, CYAN,`
)} MAGENTA,`
)} BLUE`
)} AND BACK TO GREEN.`
)
}
})
那么结果正如下:
# Load Time
chalk: 15.653ms
kleur: 1.195ms
ansi-colors: 1.227ms
turbocolor: 0.740ms
# Using Styles
chalk × 8,634 ops/sec
kleur × 290,343 ops/sec
ansi-colors × 93,980 ops/sec
turbocolor × 374,825 ops/sec
# Chaining Styles
chalk × 1,802 ops/sec
kleur × 44,709 ops/sec
ansi-colors × 14,495 ops/sec
turbocolor × 52,300 ops/sec
# Nesting Styles
chalk × 12,088 ops/sec
kleur × 176,561 ops/sec
ansi-colors × 82,132 ops/sec
turbocolor × 190,595 ops/sec