Build benchmarks page
This commit is contained in:
@ -102,6 +102,7 @@
|
|||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"source-map-loader": "^4.0.1",
|
"source-map-loader": "^4.0.1",
|
||||||
"terser-webpack-plugin": "^5.3.9",
|
"terser-webpack-plugin": "^5.3.9",
|
||||||
|
"tinybench": "^2.5.0",
|
||||||
"ts-jest": "^29.1.0",
|
"ts-jest": "^29.1.0",
|
||||||
"ts-loader": "^9.4.4",
|
"ts-loader": "^9.4.4",
|
||||||
"typescript": "^5.2.2",
|
"typescript": "^5.2.2",
|
||||||
|
10
packages/app/public/bench.html
Normal file
10
packages/app/public/bench.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Snort Benchmarks</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Check console
|
||||||
|
</body>
|
||||||
|
</html>
|
105
packages/app/src/benchmarks.ts
Normal file
105
packages/app/src/benchmarks.ts
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
import { bytesToHex } from "@noble/hashes/utils";
|
||||||
|
import { DefaultQueryOptimizer, FlatReqFilter, QueryOptimizer, ReqFilter } from "@snort/system";
|
||||||
|
import { compress, expand_filter, flat_merge, get_diff, default as wasmInit } from "@snort/system-query";
|
||||||
|
import WasmPath from "@snort/system-query/pkg/system_query_bg.wasm";
|
||||||
|
import { Bench } from 'tinybench';
|
||||||
|
|
||||||
|
const WasmQueryOptimizer = {
|
||||||
|
expandFilter: (f: ReqFilter) => {
|
||||||
|
return expand_filter(f) as Array<FlatReqFilter>;
|
||||||
|
},
|
||||||
|
getDiff: (prev: Array<ReqFilter>, next: Array<ReqFilter>) => {
|
||||||
|
return get_diff(prev, next) as Array<FlatReqFilter>;
|
||||||
|
},
|
||||||
|
flatMerge: (all: Array<FlatReqFilter>) => {
|
||||||
|
return flat_merge(all) as Array<ReqFilter>;
|
||||||
|
},
|
||||||
|
compress: (all: Array<ReqFilter>) => {
|
||||||
|
return compress(all) as Array<ReqFilter>;
|
||||||
|
}
|
||||||
|
} as QueryOptimizer;
|
||||||
|
|
||||||
|
const makeOnePubkey = () => {
|
||||||
|
const rnd = globalThis.crypto.getRandomValues(new Uint8Array(32));
|
||||||
|
return bytesToHex(rnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
const randomPubkeys = (() => {
|
||||||
|
const ret = [];
|
||||||
|
for(let x =0;x<50;x++) {
|
||||||
|
ret.push(makeOnePubkey());
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
})();
|
||||||
|
|
||||||
|
const testExpand = (q: QueryOptimizer) => {
|
||||||
|
q.expandFilter({
|
||||||
|
kinds: [1, 6, 7, 6969],
|
||||||
|
authors: randomPubkeys
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const testGetDiff = (q: QueryOptimizer) => {
|
||||||
|
q.getDiff([{
|
||||||
|
kinds: [1, 2, 3],
|
||||||
|
authors: randomPubkeys
|
||||||
|
}], [{
|
||||||
|
kinds: [1, 2, 3, 4, 5],
|
||||||
|
authors: randomPubkeys
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
const testFlatMerge = (q: QueryOptimizer) => {
|
||||||
|
q.flatMerge(q.expandFilter({
|
||||||
|
kinds: [1, 6, 7, 6969],
|
||||||
|
authors: randomPubkeys
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
const testCompress = (q: QueryOptimizer) => {
|
||||||
|
q.compress([
|
||||||
|
{
|
||||||
|
kinds: [1, 6, 7, 6969],
|
||||||
|
authors: randomPubkeys
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kinds: [1, 6, 7, 6969],
|
||||||
|
authors: randomPubkeys
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kinds: [1, 6, 7, 6969],
|
||||||
|
authors: randomPubkeys
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kinds: [1, 6, 7, 6969],
|
||||||
|
authors: randomPubkeys
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kinds: [1, 6, 7, 6969],
|
||||||
|
authors: randomPubkeys
|
||||||
|
}
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
const wasmSuite = new Bench({ time: 1_000 });
|
||||||
|
const suite = new Bench({ time: 1_000 });
|
||||||
|
|
||||||
|
const addTests = (s: Bench, q: QueryOptimizer) => {
|
||||||
|
s.add("expand", () => testExpand(q));
|
||||||
|
s.add("get_diff", () => testGetDiff(q));
|
||||||
|
s.add("flat_merge", () => testFlatMerge(q));
|
||||||
|
s.add("compress", () => testCompress(q));
|
||||||
|
}
|
||||||
|
|
||||||
|
addTests(suite, DefaultQueryOptimizer);
|
||||||
|
addTests(wasmSuite, WasmQueryOptimizer);
|
||||||
|
|
||||||
|
const runAll = async() => {
|
||||||
|
await wasmInit(WasmPath);
|
||||||
|
|
||||||
|
console.log("DefaultQueryOptimizer");
|
||||||
|
await suite.run();
|
||||||
|
console.table(suite.table());
|
||||||
|
|
||||||
|
console.log("WasmQueryOptimizer");
|
||||||
|
await wasmSuite.run();
|
||||||
|
console.table(wasmSuite.table());
|
||||||
|
};
|
||||||
|
runAll().catch(console.error);
|
@ -19,6 +19,7 @@ const config = {
|
|||||||
import: require.resolve("@snort/system/dist/pow-worker.js"),
|
import: require.resolve("@snort/system/dist/pow-worker.js"),
|
||||||
filename: "pow.js",
|
filename: "pow.js",
|
||||||
},
|
},
|
||||||
|
bench: "./src/benchmarks.ts"
|
||||||
},
|
},
|
||||||
target: "browserslist",
|
target: "browserslist",
|
||||||
mode: isProduction ? "production" : "development",
|
mode: isProduction ? "production" : "development",
|
||||||
@ -47,7 +48,12 @@ const config = {
|
|||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: "public/index.html",
|
template: "public/index.html",
|
||||||
favicon: "public/favicon.ico",
|
favicon: "public/favicon.ico",
|
||||||
excludeChunks: ["pow"],
|
excludeChunks: ["pow", "bench"],
|
||||||
|
}),
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
filename: "bench.html",
|
||||||
|
template: "public/bench.html",
|
||||||
|
chunks: ["bench"],
|
||||||
}),
|
}),
|
||||||
new ESLintPlugin({
|
new ESLintPlugin({
|
||||||
extensions: ["js", "mjs", "jsx", "ts", "tsx"],
|
extensions: ["js", "mjs", "jsx", "ts", "tsx"],
|
||||||
|
@ -2757,6 +2757,7 @@ __metadata:
|
|||||||
react-twitter-embed: ^4.0.4
|
react-twitter-embed: ^4.0.4
|
||||||
source-map-loader: ^4.0.1
|
source-map-loader: ^4.0.1
|
||||||
terser-webpack-plugin: ^5.3.9
|
terser-webpack-plugin: ^5.3.9
|
||||||
|
tinybench: ^2.5.0
|
||||||
ts-jest: ^29.1.0
|
ts-jest: ^29.1.0
|
||||||
ts-loader: ^9.4.4
|
ts-loader: ^9.4.4
|
||||||
typescript: ^5.2.2
|
typescript: ^5.2.2
|
||||||
@ -13160,6 +13161,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"tinybench@npm:^2.5.0":
|
||||||
|
version: 2.5.0
|
||||||
|
resolution: "tinybench@npm:2.5.0"
|
||||||
|
checksum: 284bb9428f197ec8b869c543181315e65e41ccfdad3c4b6c916bb1fdae1b5c6785661b0d90cf135b48d833b03cb84dc5357b2d33ec65a1f5971fae0ab2023821
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"tmp@npm:^0.0.33":
|
"tmp@npm:^0.0.33":
|
||||||
version: 0.0.33
|
version: 0.0.33
|
||||||
resolution: "tmp@npm:0.0.33"
|
resolution: "tmp@npm:0.0.33"
|
||||||
|
Reference in New Issue
Block a user