Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hazae41/deimos

Modern and minimalist benchmarking library for the web
https://github.com/hazae41/deimos

asynchronous benchmark benchmarking browser deno fast javascript minimalist node runner speedtest typescript

Last synced: 1 day ago
JSON representation

Modern and minimalist benchmarking library for the web

Awesome Lists containing this project

README

        





Modern and minimalist benchmarking library

```bash
npm i @hazae41/deimos
```

[**Node Package ðŸ“Ķ**](https://www.npmjs.com/package/@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 🚀

```typescript
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}`)
```

```bash
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

```bash
node ./dist/test/index.bench.cjs
```

#### Using ts-node with ESM

```bash
ts-node --esm ./src/index.bench.ts
```

#### Using ts-node with ESM and ttypescript

```bash
ts-node --esm --compiler ttypescript ./src/index.bench.ts
```

#### Using dynamic import

```typescript
await import("index.bench.ts")
```