Skip to content

Commit 89a801c

Browse files
committed
initial benchmarking
1 parent 1e8fa34 commit 89a801c

4 files changed

Lines changed: 85 additions & 42 deletions

File tree

bench/basic.bench.js

Lines changed: 70 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,70 @@
1-
const sqlite3 = require('sqlite3');
2-
const Sqlite = require('../');
3-
4-
const t = process.hrtime();
5-
const db = new sqlite3.Database(':memory:');
6-
db.serialize(() => {
7-
db.run('CREATE TABLE lorem (info TEXT)');
8-
9-
const stmt = db.prepare('INSERT INTO lorem VALUES (?)');
10-
for (let i = 0; i < 10; i++) {
11-
stmt.run(`Ipsum ${i}`);
12-
}
13-
stmt.finalize();
14-
15-
db.each('SELECT rowid AS id, info FROM lorem', (err, row) => {
16-
// console.log(`${row.id}: ${row.info}`);
17-
});
18-
db.close();
19-
console.log('sqlite3', process.hrtime(t)[1]);
20-
});
21-
22-
const connector = new Sqlite.Sqlite();
23-
24-
(async () => {
25-
const s = process.hrtime();
26-
// Creating a regular async connection
27-
const conn = await connector.open({
28-
verbose: true // process.env.NODE_ENV !== 'production'
29-
});
30-
// conn.prepare('CREATE TABLE lorem (info TEXT)');
31-
// conn.close();
32-
console.log('neon sqlite', process.hrtime(s)[1]);
33-
})();
34-
35-
(async () => {
36-
const s = process.hrtime();
37-
// Creating a regular async connection
38-
// Sqlite.example();
39-
// conn.close();
40-
console.log('example', process.hrtime(s)[1]);
41-
})();
1+
/* eslint import/no-extraneous-dependencies: off */
2+
const Benchmark = require('benchmark');
3+
const { Database } = require('sqlite3');
4+
const betterSqlite = require('better-sqlite3');
5+
const { Sqlite } = require('..');
6+
7+
const suite = new Benchmark.Suite();
8+
9+
const defaultOpts = {
10+
maxTime: 0,
11+
minSamples: 10
12+
};
13+
14+
suite
15+
.add('sqlite3', {
16+
fn: () => {
17+
const db = new Database(':memory:');
18+
19+
db.serialize(() => {
20+
db.run('CREATE TABLE lorem (info TEXT)');
21+
22+
const stmt = db.prepare('INSERT INTO lorem VALUES (?)');
23+
for (let i = 0; i < 10; i++) {
24+
stmt.run(`Ipsum ${i}`);
25+
}
26+
stmt.finalize();
27+
28+
db.close();
29+
});
30+
},
31+
...defaultOpts
32+
})
33+
.add('better-sqlite3', {
34+
fn: () => {
35+
const db = betterSqlite(':memory:');
36+
37+
db.exec('CREATE TABLE lorem (info TEXT)');
38+
39+
const stmt = db.prepare('INSERT INTO lorem VALUES (?)');
40+
for (let i = 0; i < 10; i++) {
41+
stmt.run(`Ipsum ${i}`);
42+
}
43+
44+
db.close();
45+
},
46+
...defaultOpts
47+
})
48+
.add('sqlite/sqlite', {
49+
fn: () => {
50+
const conn = new Sqlite();
51+
conn.open({
52+
verbose: true,
53+
database: ':memory:'
54+
});
55+
conn.execute('DROP TABLE IF EXISTS contacts;');
56+
conn.close();
57+
},
58+
...defaultOpts
59+
})
60+
.on('complete', function complete() {
61+
if (suite.aborted) return;
62+
console.log(`Fastest is ${this.filter('fastest').map('name')}`);
63+
console.log('Higher is better:');
64+
suite
65+
.map(benchmark => ({ name: benchmark.name, score: benchmark.hz }))
66+
.forEach(benchmark => {
67+
console.log(benchmark.name, benchmark.score);
68+
});
69+
})
70+
.run();

native/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ mod tests {
129129
b.iter(|| {
130130
let conn = Connection::open_in_memory().unwrap();
131131
let stmt = conn.prepare("CREATE TABLE lorem (info TEXT)").unwrap();
132-
// conn.close().unwrap();
133132
});
134133
}
135134
}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
"neon-cli": "^0.2.0"
1010
},
1111
"scripts": {
12+
"bench": "node bench/basic.bench.js",
1213
"build": "neon build --release",
1314
"install": "yarn build",
1415
"lint": "eslint lib test",
1516
"test": "jest ."
1617
},
1718
"devDependencies": {
19+
"benchmark": "^2.1.4",
1820
"better-sqlite3": "^5.0.1",
1921
"eslint": "^5.9.0",
2022
"eslint-config-bliss": "^3.0.0",

yarn.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,14 @@ bcrypt-pbkdf@^1.0.0:
532532
dependencies:
533533
tweetnacl "^0.14.3"
534534

535+
benchmark@^2.1.4:
536+
version "2.1.4"
537+
resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629"
538+
integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik=
539+
dependencies:
540+
lodash "^4.17.4"
541+
platform "^1.3.3"
542+
535543
better-sqlite3@^5.0.1:
536544
version "5.0.1"
537545
resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-5.0.1.tgz#5addb5dcf18c9374c570a1eab7694e67fc9437a3"
@@ -3441,6 +3449,11 @@ pkg-dir@^2.0.0:
34413449
dependencies:
34423450
find-up "^2.1.0"
34433451

3452+
platform@^1.3.3:
3453+
version "1.3.5"
3454+
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444"
3455+
integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==
3456+
34443457
pluralize@^7.0.0:
34453458
version "7.0.0"
34463459
resolved "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"

0 commit comments

Comments
 (0)