You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-01 16:46:54 +03:00
hdr-histogram-js
This commit is contained in:
@ -31,7 +31,6 @@ async function getName() {
|
||||
.parseSync().name;
|
||||
}
|
||||
|
||||
|
||||
const runnerPath = fileURLToPath(new URL('runner.js', import.meta.url)),
|
||||
path = new URL(`${await getName()}/`, import.meta.url),
|
||||
metadata = await import(new URL('index.js', path));
|
||||
|
@ -1,6 +1,8 @@
|
||||
import yargs from 'yargs';
|
||||
import { hideBin } from 'yargs/helpers';
|
||||
import { basename } from 'path';
|
||||
import * as hdr from 'hdr-histogram-js';
|
||||
hdr.initWebAssemblySync();
|
||||
|
||||
const { path, times, concurrency } = yargs(hideBin(process.argv))
|
||||
.option('path', {
|
||||
@ -39,26 +41,31 @@ const [ { benchmark, teardown }, metadata ] = await Promise.all([
|
||||
|
||||
async function run(times) {
|
||||
return new Promise(resolve => {
|
||||
const histogram = hdr.build({ useWebAssembly: true });
|
||||
let num = 0,
|
||||
inProgress = 0;
|
||||
|
||||
function run() {
|
||||
++inProgress;
|
||||
++num;
|
||||
|
||||
const start = process.hrtime.bigint();
|
||||
benchmark(metadata)
|
||||
.catch(err => console.error(err))
|
||||
.finally(() => {
|
||||
histogram.recordValue(Number(process.hrtime.bigint() - start));
|
||||
--inProgress;
|
||||
|
||||
if (num < times) {
|
||||
run();
|
||||
} else if (inProgress === 0) {
|
||||
resolve();
|
||||
resolve(histogram);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (let i = 0; i < concurrency; i++) {
|
||||
const toInitiate = Math.min(concurrency, times);
|
||||
for (let i = 0; i < toInitiate; i++) {
|
||||
run();
|
||||
}
|
||||
});
|
||||
@ -68,9 +75,8 @@ async function run(times) {
|
||||
await run(Math.min(times * 0.1, 10_000));
|
||||
|
||||
// benchmark
|
||||
const start = process.hrtime.bigint();
|
||||
await run(times);
|
||||
const took = (process.hrtime.bigint() - start);
|
||||
console.log(`[${basename(path)}]: took ${took / 1_000_000n}ms, ${took / BigInt(times)}ns per operation`);
|
||||
const histogram = await run(times);
|
||||
console.log(`[${basename(path)}]:`);
|
||||
console.table(histogram.toJSON());
|
||||
|
||||
await teardown();
|
||||
|
97
benchmark/package-lock.json
generated
97
benchmark/package-lock.json
generated
@ -8,7 +8,7 @@
|
||||
"dependencies": {
|
||||
"@node-redis/client-local": "../packages/client",
|
||||
"@node-redis/client-production": "npm:@node-redis/client@1.0.0",
|
||||
"hazelcast-client": "^5.0.2",
|
||||
"hdr-histogram-js": "^2.0.1",
|
||||
"ioredis": "4.28.1",
|
||||
"redis-v3": "npm:redis@3.1.2",
|
||||
"yargs": "17.3.0"
|
||||
@ -26,7 +26,6 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@istanbuljs/nyc-config-typescript": "^1.0.1",
|
||||
"@node-redis/benchmark": "*",
|
||||
"@node-redis/test-utils": "*",
|
||||
"@types/node": "^16.11.10",
|
||||
"@types/redis-parser": "^3.0.0",
|
||||
@ -49,6 +48,11 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@assemblyscript/loader": {
|
||||
"version": "0.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz",
|
||||
"integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg=="
|
||||
},
|
||||
"node_modules/@node-redis/client-local": {
|
||||
"resolved": "../packages/client",
|
||||
"link": true
|
||||
@ -68,11 +72,6 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/long": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
|
||||
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
@ -95,6 +94,25 @@
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
@ -182,16 +200,14 @@
|
||||
"node": "6.* || 8.* || >= 10.*"
|
||||
}
|
||||
},
|
||||
"node_modules/hazelcast-client": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hazelcast-client/-/hazelcast-client-5.0.2.tgz",
|
||||
"integrity": "sha512-CsNvZZn2bQn8E+j5HgXzhhEfjliBn6626qBb5upcIQHw1J9rtobiS2/pqabNKXMwKjyzVNc/ui+yqFKaGMrc6A==",
|
||||
"node_modules/hdr-histogram-js": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz",
|
||||
"integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==",
|
||||
"dependencies": {
|
||||
"@types/long": "4.0.1",
|
||||
"long": "4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.4.0"
|
||||
"@assemblyscript/loader": "^0.10.1",
|
||||
"base64-js": "^1.2.0",
|
||||
"pako": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/ioredis": {
|
||||
@ -242,11 +258,6 @@
|
||||
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
|
||||
"integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
|
||||
},
|
||||
"node_modules/long": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
||||
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
@ -260,6 +271,11 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/pako": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
|
||||
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
|
||||
},
|
||||
"node_modules/redis-commands": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
|
||||
@ -396,11 +412,15 @@
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@assemblyscript/loader": {
|
||||
"version": "0.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz",
|
||||
"integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg=="
|
||||
},
|
||||
"@node-redis/client-local": {
|
||||
"version": "file:../packages/client",
|
||||
"requires": {
|
||||
"@istanbuljs/nyc-config-typescript": "^1.0.1",
|
||||
"@node-redis/benchmark": "*",
|
||||
"@node-redis/test-utils": "*",
|
||||
"@types/node": "^16.11.10",
|
||||
"@types/redis-parser": "^3.0.0",
|
||||
@ -435,11 +455,6 @@
|
||||
"yallist": "4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/long": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
|
||||
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
@ -453,6 +468,11 @@
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
|
||||
},
|
||||
"cliui": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
@ -514,13 +534,14 @@
|
||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
|
||||
},
|
||||
"hazelcast-client": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hazelcast-client/-/hazelcast-client-5.0.2.tgz",
|
||||
"integrity": "sha512-CsNvZZn2bQn8E+j5HgXzhhEfjliBn6626qBb5upcIQHw1J9rtobiS2/pqabNKXMwKjyzVNc/ui+yqFKaGMrc6A==",
|
||||
"hdr-histogram-js": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz",
|
||||
"integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==",
|
||||
"requires": {
|
||||
"@types/long": "4.0.1",
|
||||
"long": "4.0.0"
|
||||
"@assemblyscript/loader": "^0.10.1",
|
||||
"base64-js": "^1.2.0",
|
||||
"pako": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"ioredis": {
|
||||
@ -561,11 +582,6 @@
|
||||
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
|
||||
"integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
|
||||
},
|
||||
"long": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
||||
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
@ -576,6 +592,11 @@
|
||||
"resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
|
||||
"integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
|
||||
},
|
||||
"pako": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
|
||||
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
|
||||
},
|
||||
"redis-commands": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
|
||||
|
@ -9,7 +9,7 @@
|
||||
"dependencies": {
|
||||
"@node-redis/client-local": "../packages/client",
|
||||
"@node-redis/client-production": "npm:@node-redis/client@1.0.0",
|
||||
"hazelcast-client": "^5.0.2",
|
||||
"hdr-histogram-js": "2.0.1",
|
||||
"ioredis": "4.28.1",
|
||||
"redis-v3": "npm:redis@3.1.2",
|
||||
"yargs": "17.3.0"
|
||||
|
1
benchmark/requirements.txt
Normal file
1
benchmark/requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
redisbench_admin>=0.5.24
|
Reference in New Issue
Block a user