karma-bench
v0.1.3
Published
Karma plugin for run benchmarks.js tests
Downloads
3
Maintainers
Readme
karma-bench
A Karma plugin to run Benchmark.js v2
Based on karma-benchmark plugin, but it don't break tests functions context
Installation
npm install karma-bench --save-dev
Karma Configuration
Reporting results on the command line
To see jsPerf style results on the command line, install karma-benchmark-reporter
:
npm install karma-benchmark-reporter --save-dev
Then, in karma.conf.js, add benchmark
to the list of reporters:
module.exports = function(config) {
config.set({
// Other Karma config here...
frameworks: ['bench'],
reporters: ['benchmark']
});
};
Run Karma:
karma start
Then, you'll then see output that looks like:
Chrome 51.0.2704 (Mac OS X 10.11.5) Array iteration: util.each at 19356910 ops/sec
Chrome 51.0.2704 (Mac OS X 10.11.5) Array iteration: Array.forEach at 2567531 ops/sec
Chrome 51.0.2704 (Mac OS X 10.11.5) Array search: util.contains at 12635982 ops/sec
Chrome 51.0.2704 (Mac OS X 10.11.5) Array search: Array.indexOf at 5828437 ops/sec
Chrome 51.0.2704 (Mac OS X 10.11.5)
Array iteration: util.each at 19356910 ops/sec (7.54x faster than Array.forEach)
Array search: util.contains at 12635982 ops/sec (2.17x faster than Array.indexOf)
Timeouts
As large suites of Benchmarks take a long time to run, you may need to increase Karma's timeout from it's default of 60000.
captureTimeout: 60000
Writing Benchmarks
Suites and benchmarks are defined using a wrapper for Benchmark.js in the form of the suite
and benchmark
globals.
Typical
In this example, a suite is defined that pits _.each
against the native Array.forEach
method:
suite('Array iteration', function() {
benchmark('_.each', function() {
_.each([1, 2, 3], function(el) {
return el;
});
});
benchmark('native forEach', function() {
[1, 2, 3].forEach(function(el) {
return el;
});
});
});
Suite options
Suite options are the same as in Benchmark.js.
See the Benchmark.js Suite constructor API docs for a full list of options.
suite('Array iteration', function() {
benchmark('_.each', {
fn: function () {
_.each(this.list, function(number) {
return number;
});
},
setup: function() {
this.list = [5, 4, 3];
},
teardown: function() {
this.list = null;
}
});
}, {
onCycle: function(event) {
var suite = this;
var benchmark = event.target;
console.log('Cycle completed for ' + suite.name + ': ' + benchmark.name);
}
});
Benchmark options
Benchmark options are the same as in Benchmark.js.
See the Benchmark.js Benchmark constructor API docs for a full list of options.