@hazae41/deimos
v1.0.6
Published
Modern and minimalist benchmarking library for the web
Downloads
56
Maintainers
Readme
npm i @hazae41/deimos
src/node/bench/xor_mod.bench.ts
cpu: Apple M1 Max
runtime: node v18.12.1 (arm64-darwin)
┌─────────┬──────────────────┬─────────────┬─────────────┐
│ (index) │ average │ minimum │ maximum │
├─────────┼──────────────────┼─────────────┼─────────────┤
│ wasm │ '880.48 ns/iter' │ '750.00 ns' │ '154.00 μs' │
│ js │ '17.71 μs/iter' │ '17.42 μs' │ '610.67 μs' │
└─────────┴──────────────────┴─────────────┴─────────────┘
Summary
- wasm is 20.11x faster than js
Philosophy 🧠
Deimos aims to be minimalist and to always work no matter the:
- runtime (Node, Deno, browser)
- module resolution (ESM, CommonJS)
- language (TypeScript, JavaScript)
- bundler (Rollup, Vite)
It's just a library you can import everywhere! That's it, no CLI, no configuration file, just JavaScript.
Features 🔥
Current features
- 100% TypeScript and ESM
- No external dependency
- Runnable in the browser
Usage 🚀
import { bench } from "@hazae41/deimos"
const a = await bench("my library", async () => {
await compute()
})
const b = await bench("some other library", async () => {
await compute2()
})
console.log(`${a.message} is ${a.ratio(b)} times faster than ${b.message}`)
ts-node --esm ./bench.ts
Setting up 🔧
Most setups will just need a custom entry point that imports all your benchs, that you either run as-is using ts-node
, or that you transpile using your favorite bundler.
For example, the entry point index.bench.ts
imports:
some-module/index.bench.ts
, which imports:some-module/some-file.bench.ts
some-module/some-other-file.bench.ts
some-other-module/index.bench.ts
, which imports:some-other-module/some-file.bench.ts
some-other-module/some-other-file.bench.ts
You can see an example on this repository, all benchs are imported in src/index.bench.ts
, then we use Rollup to transpile it into dist/test/index.bench.cjs
, which we then run using Node with node ./dist/test/index.bench.cjs
.
Running 🏎️
Using a bundler
node ./dist/test/index.bench.cjs
Using ts-node with ESM
ts-node --esm ./src/index.bench.ts
Using ts-node with ESM and ttypescript
ts-node --esm --compiler ttypescript ./src/index.bench.ts
Using dynamic import
await import("index.bench.ts")