diff --git a/bench/basic.bench.js b/bench/basic.bench.js index e62e60c..d497947 100644 --- a/bench/basic.bench.js +++ b/bench/basic.bench.js @@ -1,41 +1,70 @@ -const sqlite3 = require('sqlite3'); -const Sqlite = require('../'); - -const t = process.hrtime(); -const db = new sqlite3.Database(':memory:'); -db.serialize(() => { - db.run('CREATE TABLE lorem (info TEXT)'); - - const stmt = db.prepare('INSERT INTO lorem VALUES (?)'); - for (let i = 0; i < 10; i++) { - stmt.run(`Ipsum ${i}`); - } - stmt.finalize(); - - db.each('SELECT rowid AS id, info FROM lorem', (err, row) => { - // console.log(`${row.id}: ${row.info}`); - }); - db.close(); - console.log('sqlite3', process.hrtime(t)[1]); -}); - -const connector = new Sqlite.Sqlite(); - -(async () => { - const s = process.hrtime(); - // Creating a regular async connection - const conn = await connector.open({ - verbose: true // process.env.NODE_ENV !== 'production' - }); - // conn.prepare('CREATE TABLE lorem (info TEXT)'); - // conn.close(); - console.log('neon sqlite', process.hrtime(s)[1]); -})(); - -(async () => { - const s = process.hrtime(); - // Creating a regular async connection - // Sqlite.example(); - // conn.close(); - console.log('example', process.hrtime(s)[1]); -})(); +/* eslint import/no-extraneous-dependencies: off */ +const Benchmark = require('benchmark'); +const { Database } = require('sqlite3'); +const betterSqlite = require('better-sqlite3'); +const { Sqlite } = require('..'); + +const suite = new Benchmark.Suite(); + +const defaultOpts = { + maxTime: 0, + minSamples: 10 +}; + +suite + .add('sqlite3', { + fn: () => { + const db = new Database(':memory:'); + + db.serialize(() => { + db.run('CREATE TABLE lorem (info TEXT)'); + + const stmt = db.prepare('INSERT INTO lorem VALUES (?)'); + for (let i = 0; i < 10; i++) { + stmt.run(`Ipsum ${i}`); + } + stmt.finalize(); + + db.close(); + }); + }, + ...defaultOpts + }) + .add('better-sqlite3', { + fn: () => { + const db = betterSqlite(':memory:'); + + db.exec('CREATE TABLE lorem (info TEXT)'); + + const stmt = db.prepare('INSERT INTO lorem VALUES (?)'); + for (let i = 0; i < 10; i++) { + stmt.run(`Ipsum ${i}`); + } + + db.close(); + }, + ...defaultOpts + }) + .add('sqlite/sqlite', { + fn: () => { + const conn = new Sqlite(); + conn.open({ + verbose: true, + database: ':memory:' + }); + conn.execute('DROP TABLE IF EXISTS contacts;'); + conn.close(); + }, + ...defaultOpts + }) + .on('complete', function complete() { + if (suite.aborted) return; + console.log(`Fastest is ${this.filter('fastest').map('name')}`); + console.log('Higher is better:'); + suite + .map(benchmark => ({ name: benchmark.name, score: benchmark.hz })) + .forEach(benchmark => { + console.log(benchmark.name, benchmark.score); + }); + }) + .run(); diff --git a/native/src/lib.rs b/native/src/lib.rs index ffda423..3ad8c06 100644 --- a/native/src/lib.rs +++ b/native/src/lib.rs @@ -129,7 +129,6 @@ mod tests { b.iter(|| { let conn = Connection::open_in_memory().unwrap(); let stmt = conn.prepare("CREATE TABLE lorem (info TEXT)").unwrap(); - // conn.close().unwrap(); }); } } diff --git a/package.json b/package.json index 62b45bc..2b118cc 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,14 @@ "neon-cli": "^0.2.0" }, "scripts": { + "bench": "node bench/basic.bench.js", "build": "neon build --release", "install": "yarn build", "lint": "eslint lib test", "test": "jest ." }, "devDependencies": { + "benchmark": "^2.1.4", "better-sqlite3": "^5.0.1", "eslint": "^5.9.0", "eslint-config-bliss": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 4f10f92..9f00b16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -532,6 +532,14 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +benchmark@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik= + dependencies: + lodash "^4.17.4" + platform "^1.3.3" + better-sqlite3@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-5.0.1.tgz#5addb5dcf18c9374c570a1eab7694e67fc9437a3" @@ -3441,6 +3449,11 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +platform@^1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" + integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"