nanobench

Simple benchmarking tool with TAP-like output that is easy to parse

  • Owner: mafintosh/nanobench
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

nanobench

Simple benchmarking tool with TAP-like output that is easy to parse.

npm install nanobench

Usage

var bench = require('nanobench')

bench('sha256 200.000 times', function (b) {
  var crypto = require('crypto')
  var data = new Buffer('hello world')

  b.start()

  for (var i = 0; i < 200000; i++) {
    data = crypto.createHash('sha256').update(data).digest()
  }

  b.end()
})

bench('sha1 200.000 times', function (b) {
  var crypto = require('crypto')
  var data = new Buffer('hello world')

  b.start()

  for (var i = 0; i < 200000; i++) {
    data = crypto.createHash('sha1').update(data).digest()
  }

  b.end()
})

Running the above will produce output similar to this:

NANOBENCH version 2
> node example.js

# sha1 200.000 times
ok ~554 ms (0 s + 554449000 ns)

# sha256 200.000 times
ok ~598 ms (0 s + 597703365 ns)

all benchmarks completed
ok ~1.15 s (1 s + 152152365 ns)

API

benchmark(name, run)

Add a new benchmark. run is called with a benchmark object, b that has the following methods

  • b.start() - Start the benchmark. If not called the bench will be tracked from the beginning of the function.
  • b.end() - End the benchmark.
  • b.error(err) - Benchmark failed. Report error.
  • b.log(msg) - Log out a message

benchmark.skip(name, run)

Skip a benchmark.

benchmark.only(name, run)

Only run this benchmark.

CLI

If you have multiple benchmarks as different files you can use the cli benchmark runner to run them all

npm install -g nanobench
nanobench benchmarks/*.js

Comparing benchmarks

A comparison tool for comparing two benchmark outputs is included as well.
This is useful if fx you ran a benchmark on two different git checkouts and want to compare which
one was the fastest one

> git checkout hash-using-sha256
> node benchmark.js > output-sha256
> git checkout hash-using-blake2b
> node benchmark.js > output-blake2b

nanobench-compare output-sha256 output-blake2b

The compare tool will print out something like this

NANOBENCH version 2, NANOBENCH version 2
> node benchmark.js, > node benchmark.js, # hashing 200.000 times          >>>   # hashing 200.000 times
# (using sha256)                 >>>   # (using blake2b)
ok ~591 ms (0 s + 590687187 ns)  >>>   ok ~95 ms (0 s + 95347216 ns), all benchmarks completed         >>>   all benchmarks completed
ok ~591 ms (0 s + 590687187 ns)  >>>   ok ~95 ms (0 s + 95347216 ns), ```

Where `>>>` means that right one was faster, `<<<` that the left one was, and `===` that they were within 5% of other



## Parser

An parser for the output format is included as well. You can require it from node using

``` js
var parse = require('nanobench/parse')
var output = parse(outputAsString)
console.log(output)

If you parse the above example output an object similar to this will be printed out

{ type: 'NANOBENCH',
  version: 2,
  command: 'nanobench example.js',
  benchmarks:
   [ { name: 'sha256 200.000 times',
       output: [],
       error: null,
       time: [Object] },
     { name: 'sha1 200.000 times',
       output: [],
       error: null,
       time: [Object] },
     { name: 'sha256 200.000 times',
       output: [],
       error: null,
       time: [Object] } ],
  error: null,
  time: [ 1, 802600099 ] }

License

MIT

Main metrics

Overview
Name With Ownermafintosh/nanobench
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2016-11-01 14:49:54
Pushed At2022-08-23 09:41:09
Last Commit At2022-08-23 11:41:03
Release Count8
Last Release Namev3.0.0 (Posted on 2022-08-23 11:41:03)
First Release Namev1.0.0 (Posted on 2016-11-01 15:50:02)
用户参与
Stargazers Count170
Watchers Count6
Fork Count8
Commits Count17
Has Issues Enabled
Issues Count7
Issue Open Count4
Pull Requests Count2
Pull Requests Open Count2
Pull Requests Close Count1
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private