Skip to content

Commit 79ea7b6

Browse files
committed
bench: add simple benchmarks
1 parent 57f30b0 commit 79ea7b6

File tree

5 files changed

+158
-0
lines changed

5 files changed

+158
-0
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ cache:
2020
before_install:
2121
# Skip updating shrinkwrap / lock
2222
- "npm config set shrinkwrap false"
23+
# Remove all non-test dependencies
24+
- "npm rm --save-dev benchmark beautify-benchmark"
2325
# Setup Node.js version-specific dependencies
2426
- "test $TRAVIS_NODE_VERSION != '0.6' || npm rm --save-dev nyc"
2527
- "test $TRAVIS_NODE_VERSION != '0.8' || npm rm --save-dev nyc"

benchmark/escape.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
var benchmark = require('benchmark');
2+
var benchmarks = require('beautify-benchmark');
3+
4+
global.SqlString = require('..');
5+
6+
global.arr = [ 42, 'foobar' ];
7+
global.buf = new Buffer('foobar');
8+
global.date = new Date(0);
9+
global.func = { toSqlString: function () { return 'NOW()'; } };
10+
global.num = 42;
11+
global.obj = { foo: 'bar' };
12+
global.str = 'foobar';
13+
14+
var suite = new benchmark.Suite();
15+
16+
suite.add({
17+
name : 'array',
18+
minSamples : 100,
19+
fn : 'var val = SqlString.escape(arr);'
20+
});
21+
22+
suite.add({
23+
name : 'boolean',
24+
minSamples : 100,
25+
fn : 'var val = SqlString.escape(true);'
26+
});
27+
28+
suite.add({
29+
name : 'date',
30+
minSamples : 100,
31+
fn : 'var val = SqlString.escape(date);'
32+
});
33+
34+
suite.add({
35+
name : 'function',
36+
minSamples : 100,
37+
fn : 'var val = SqlString.escape(func);'
38+
});
39+
40+
suite.add({
41+
name : 'null',
42+
minSamples : 100,
43+
fn : 'var val = SqlString.escape(null);'
44+
});
45+
46+
suite.add({
47+
name : 'number',
48+
minSamples : 100,
49+
fn : 'var val = SqlString.escape(num);'
50+
});
51+
52+
suite.add({
53+
name : 'object',
54+
minSamples : 100,
55+
fn : 'var val = SqlString.escape(obj);'
56+
});
57+
58+
suite.add({
59+
name : 'string',
60+
minSamples : 100,
61+
fn : 'var val = SqlString.escape(str);'
62+
});
63+
64+
suite.on('start', function onCycle() {
65+
process.stdout.write(' escape\n\n');
66+
});
67+
68+
suite.on('cycle', function onCycle(event) {
69+
benchmarks.add(event.target);
70+
});
71+
72+
suite.on('complete', function onComplete() {
73+
benchmarks.log();
74+
});
75+
76+
suite.run({async: false});

benchmark/escapeId.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var benchmark = require('benchmark');
2+
var benchmarks = require('beautify-benchmark');
3+
4+
global.SqlString = require('..');
5+
6+
var suite = new benchmark.Suite();
7+
8+
suite.add({
9+
name : '"col"',
10+
minSamples : 100,
11+
fn : 'var val = SqlString.escapeId("col");'
12+
});
13+
14+
suite.add({
15+
name : '"tbl.col"',
16+
minSamples : 100,
17+
fn : 'var val = SqlString.escapeId("tbl.col");'
18+
});
19+
20+
suite.add({
21+
name : '["col1", "col2"]',
22+
minSamples : 100,
23+
fn : 'var val = SqlString.escapeId(["col1", "col2"]);'
24+
});
25+
26+
suite.on('start', function onCycle() {
27+
process.stdout.write(' escapeId\n\n');
28+
});
29+
30+
suite.on('cycle', function onCycle(event) {
31+
benchmarks.add(event.target);
32+
});
33+
34+
suite.on('complete', function onComplete() {
35+
benchmarks.log();
36+
});
37+
38+
suite.run({async: false});

benchmark/index.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
var fs = require('fs');
2+
var path = require('path');
3+
var spawn = require('child_process').spawn;
4+
5+
var exe = process.argv[0];
6+
var cwd = process.cwd();
7+
8+
for (var dep in process.versions) {
9+
console.log(' %s@%s', dep, process.versions[dep]);
10+
}
11+
12+
console.log('');
13+
14+
runScripts(fs.readdirSync(__dirname));
15+
16+
function runScripts(fileNames) {
17+
var fileName = fileNames.shift();
18+
19+
if (!fileName) {
20+
return;
21+
}
22+
23+
if (!/\.js$/i.test(fileName) || fileName.toLowerCase() === 'index.js') {
24+
runScripts(fileNames);
25+
return;
26+
}
27+
28+
var fullPath = path.join(__dirname, fileName);
29+
30+
console.log('> %s %s', exe, path.relative(cwd, fullPath));
31+
32+
var proc = spawn(exe, [fullPath], {
33+
'stdio': 'inherit'
34+
});
35+
36+
proc.on('exit', function () {
37+
runScripts(fileNames);
38+
});
39+
}

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
],
1919
"repository": "mysqljs/sqlstring",
2020
"devDependencies": {
21+
"beautify-benchmark": "0.2.4",
22+
"benchmark": "2.1.4",
2123
"eslint": "4.7.2",
2224
"eslint-plugin-markdown": "1.0.0-beta.6",
2325
"nyc": "10.3.2",
@@ -35,6 +37,7 @@
3537
"node": ">= 0.6"
3638
},
3739
"scripts": {
40+
"bench": "node benchmark/index.js",
3841
"lint": "eslint --plugin markdown --ext js,md .",
3942
"test": "node test/run.js",
4043
"test-ci": "nyc --reporter=text npm test",

0 commit comments

Comments
 (0)