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: 29 days ago
JSON representation
Modern and minimalist benchmarking library for the web
- Host: GitHub
- URL: https://github.com/hazae41/deimos
- Owner: hazae41
- Created: 2023-01-11T18:01:10.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-02-07T13:44:27.000Z (about 2 years ago)
- Last Synced: 2025-03-17T16:19:57.451Z (about 1 month ago)
- Topics: asynchronous, benchmark, benchmarking, browser, deno, fast, javascript, minimalist, node, runner, speedtest, typescript
- Language: TypeScript
- Homepage:
- Size: 36.1 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
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")
```