UNPKG

full-json-extractor

Version:

Brute-forces all possible highest-level json candidates with pruning to keep performance fast with reasonable payload < 1MB

49 lines 2.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const node_perf_hooks_1 = require("node:perf_hooks"); const node_process_1 = __importDefault(require("node:process")); const extractor_js_1 = require("./extractor.js"); function generateNestedJSON(depth) { let obj = { value: "test" }; for (let i = 0; i < depth; i++) { obj = { nested: obj }; } return obj; } function generateRawString(depth, count, sizeFactor) { const jsons = []; for (let i = 0; i < count; i++) { const base = generateNestedJSON(depth); base.padding = "x".repeat(sizeFactor); jsons.push(JSON.stringify(base)); } return jsons.join(" some text in between "); } function getMemoryUsageMB() { const used = node_process_1.default.memoryUsage().heapUsed / 1024 / 1024; return Math.round(used * 100) / 100; } async function runBenchmark() { const depths = [1, 3, 5, 10, 20]; const sizes = [0, 1000, 10000, 50_000]; // padding sizes const counts = [1, 5, 10, 20]; // number of JSONs per string for (const depth of depths) { for (const size of sizes) { for (const count of counts) { const input = generateRawString(depth, count, size); const memBefore = getMemoryUsageMB(); const start = node_perf_hooks_1.performance.now(); const result = (0, extractor_js_1.extractJsons)(input); const end = node_perf_hooks_1.performance.now(); const memAfter = getMemoryUsageMB(); console.log(`Depth=${depth}, Size=${size}, Count=${count} | Time=${(end - start).toFixed(3)} ms | ` + `MemΔ=${(memAfter - memBefore).toFixed(3)} MB | OutputLen=${JSON.stringify(result).length}`); } } } } runBenchmark(); //# sourceMappingURL=benchmark.js.map