diff --git a/README.md b/README.md index c28ed31..e7a54bf 100644 --- a/README.md +++ b/README.md @@ -64,77 +64,77 @@ assert.deepEqual(traced, [5, 0, 41, 4, 0]); ## Benchmarks ``` -node v16.13.0 +node v18.0.0 amp.js.map -trace-mapping: decoded JSON input x 41.68 ops/sec ±20.44% (38 runs sampled) -trace-mapping: encoded JSON input x 32.20 ops/sec ±45.61% (26 runs sampled) -trace-mapping: decoded Object input x 409 ops/sec ±17.04% (38 runs sampled) -trace-mapping: encoded Object input x 104 ops/sec ±16.38% (38 runs sampled) -source-map-js: encoded Object input x 10.78 ops/sec ±25.34% (22 runs sampled) -source-map-0.6.1: encoded Object input x 5.16 ops/sec ±18.91% (18 runs sampled) +trace-mapping: decoded JSON input x 183 ops/sec ±0.41% (87 runs sampled) +trace-mapping: encoded JSON input x 384 ops/sec ±0.89% (89 runs sampled) +trace-mapping: decoded Object input x 3,085 ops/sec ±0.24% (100 runs sampled) +trace-mapping: encoded Object input x 452 ops/sec ±0.80% (84 runs sampled) +source-map-js: encoded Object input x 88.82 ops/sec ±0.45% (77 runs sampled) +source-map-0.6.1: encoded Object input x 38.39 ops/sec ±1.88% (52 runs sampled) Fastest is trace-mapping: decoded Object input -trace-mapping: decoded originalPositionFor x 264,268 ops/sec ±14.14% (39 runs sampled) -trace-mapping: encoded originalPositionFor x 528,134 ops/sec ±11.70% (59 runs sampled) -source-map-js: encoded originalPositionFor x 273,022 ops/sec ±20.39% (68 runs sampled) -source-map-0.6.1: encoded originalPositionFor x 120,340 ops/sec ±14.28% (41 runs sampled) -source-map-0.7.3: encoded originalPositionFor x 308,158 ops/sec ±11.84% (64 runs sampled) -Fastest is trace-mapping: encoded originalPositionFor +trace-mapping: decoded originalPositionFor x 4,025,347 ops/sec ±0.15% (97 runs sampled) +trace-mapping: encoded originalPositionFor x 3,333,136 ops/sec ±1.26% (90 runs sampled) +source-map-js: encoded originalPositionFor x 824,978 ops/sec ±1.06% (94 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 741,300 ops/sec ±0.93% (92 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 2,587,603 ops/sec ±0.75% (97 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor *** babel.min.js.map -trace-mapping: decoded JSON input x 5.52 ops/sec ±21.77% (19 runs sampled) -trace-mapping: encoded JSON input x 10.72 ops/sec ±12.76% (27 runs sampled) -trace-mapping: decoded Object input x 348 ops/sec ±3.07% (79 runs sampled) -trace-mapping: encoded Object input x 9.20 ops/sec ±12.19% (20 runs sampled) -source-map-js: encoded Object input x 3.09 ops/sec ±11.56% (12 runs sampled) -source-map-0.6.1: encoded Object input x 1.74 ops/sec ±14.48% (9 runs sampled) +trace-mapping: decoded JSON input x 17.43 ops/sec ±8.81% (33 runs sampled) +trace-mapping: encoded JSON input x 34.18 ops/sec ±4.67% (50 runs sampled) +trace-mapping: decoded Object input x 1,010 ops/sec ±0.41% (98 runs sampled) +trace-mapping: encoded Object input x 39.45 ops/sec ±4.01% (52 runs sampled) +source-map-js: encoded Object input x 6.57 ops/sec ±3.04% (21 runs sampled) +source-map-0.6.1: encoded Object input x 4.23 ops/sec ±2.93% (15 runs sampled) Fastest is trace-mapping: decoded Object input -trace-mapping: decoded originalPositionFor x 2,898,435 ops/sec ±6.37% (76 runs sampled) -trace-mapping: encoded originalPositionFor x 2,499,183 ops/sec ±4.94% (79 runs sampled) -source-map-js: encoded originalPositionFor x 141 ops/sec ±195.99% (81 runs sampled) -source-map-0.6.1: encoded originalPositionFor x 127 ops/sec ±195.99% (75 runs sampled) -source-map-0.7.3: encoded originalPositionFor x 2,966,966 ops/sec ±12.73% (83 runs sampled) -Fastest is trace-mapping: decoded originalPositionFor,source-map-0.7.3: encoded originalPositionFor +trace-mapping: decoded originalPositionFor x 7,576,265 ops/sec ±0.74% (96 runs sampled) +trace-mapping: encoded originalPositionFor x 5,019,743 ops/sec ±0.74% (94 runs sampled) +source-map-js: encoded originalPositionFor x 3,396,137 ops/sec ±42.32% (95 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 3,753,176 ops/sec ±0.72% (95 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 6,423,633 ops/sec ±0.74% (95 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor *** preact.js.map -trace-mapping: decoded JSON input x 1,617 ops/sec ±5.57% (79 runs sampled) -trace-mapping: encoded JSON input x 3,486 ops/sec ±2.94% (87 runs sampled) -trace-mapping: decoded Object input x 136,226 ops/sec ±5.93% (75 runs sampled) -trace-mapping: encoded Object input x 7,609 ops/sec ±2.55% (87 runs sampled) -source-map-js: encoded Object input x 1,271 ops/sec ±7.33% (78 runs sampled) -source-map-0.6.1: encoded Object input x 565 ops/sec ±2.98% (83 runs sampled) +trace-mapping: decoded JSON input x 3,499 ops/sec ±0.18% (98 runs sampled) +trace-mapping: encoded JSON input x 6,078 ops/sec ±0.25% (99 runs sampled) +trace-mapping: decoded Object input x 254,788 ops/sec ±0.13% (100 runs sampled) +trace-mapping: encoded Object input x 14,063 ops/sec ±0.27% (94 runs sampled) +source-map-js: encoded Object input x 2,465 ops/sec ±0.25% (98 runs sampled) +source-map-0.6.1: encoded Object input x 1,174 ops/sec ±1.90% (95 runs sampled) Fastest is trace-mapping: decoded Object input -trace-mapping: decoded originalPositionFor x 5,043,368 ops/sec ±5.39% (82 runs sampled) -trace-mapping: encoded originalPositionFor x 4,278,674 ops/sec ±8.18% (86 runs sampled) -source-map-js: encoded originalPositionFor x 1,315,722 ops/sec ±8.02% (80 runs sampled) -source-map-0.6.1: encoded originalPositionFor x 748,765 ops/sec ±3.29% (87 runs sampled) -source-map-0.7.3: encoded originalPositionFor x 1,560,329 ops/sec ±3.83% (85 runs sampled) +trace-mapping: decoded originalPositionFor x 7,720,171 ops/sec ±0.14% (97 runs sampled) +trace-mapping: encoded originalPositionFor x 6,864,485 ops/sec ±0.16% (101 runs sampled) +source-map-js: encoded originalPositionFor x 2,387,219 ops/sec ±0.28% (98 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 1,565,339 ops/sec ±0.32% (101 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 3,819,732 ops/sec ±0.38% (98 runs sampled) Fastest is trace-mapping: decoded originalPositionFor *** react.js.map -trace-mapping: decoded JSON input x 788 ops/sec ±4.57% (84 runs sampled) -trace-mapping: encoded JSON input x 2,117 ops/sec ±3.07% (82 runs sampled) -trace-mapping: decoded Object input x 38,526 ops/sec ±3.91% (75 runs sampled) -trace-mapping: encoded Object input x 2,806 ops/sec ±2.80% (88 runs sampled) -source-map-js: encoded Object input x 387 ops/sec ±12.69% (75 runs sampled) -source-map-0.6.1: encoded Object input x 192 ops/sec ±1.71% (81 runs sampled) +trace-mapping: decoded JSON input x 1,719 ops/sec ±0.19% (99 runs sampled) +trace-mapping: encoded JSON input x 4,284 ops/sec ±0.51% (99 runs sampled) +trace-mapping: decoded Object input x 94,668 ops/sec ±0.08% (99 runs sampled) +trace-mapping: encoded Object input x 5,287 ops/sec ±0.24% (99 runs sampled) +source-map-js: encoded Object input x 814 ops/sec ±0.20% (98 runs sampled) +source-map-0.6.1: encoded Object input x 429 ops/sec ±0.24% (94 runs sampled) Fastest is trace-mapping: decoded Object input -trace-mapping: decoded originalPositionFor x 15,109,060 ops/sec ±6.30% (77 runs sampled) -trace-mapping: encoded originalPositionFor x 17,028,124 ops/sec ±4.54% (84 runs sampled) -source-map-js: encoded originalPositionFor x 8,912,348 ops/sec ±6.00% (78 runs sampled) -source-map-0.6.1: encoded originalPositionFor x 6,569,081 ops/sec ±3.61% (82 runs sampled) -source-map-0.7.3: encoded originalPositionFor x 9,004,404 ops/sec ±6.75% (75 runs sampled) -Fastest is trace-mapping: encoded originalPositionFor +trace-mapping: decoded originalPositionFor x 28,927,989 ops/sec ±0.61% (94 runs sampled) +trace-mapping: encoded originalPositionFor x 27,394,475 ops/sec ±0.55% (97 runs sampled) +source-map-js: encoded originalPositionFor x 16,856,730 ops/sec ±0.45% (96 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 12,258,950 ops/sec ±0.41% (97 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 22,272,990 ops/sec ±0.58% (95 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor ``` [source-map]: https://www.npmjs.com/package/source-map diff --git a/benchmark/index.mjs b/benchmark/index.mjs index 3ed9aae..1286d14 100644 --- a/benchmark/index.mjs +++ b/benchmark/index.mjs @@ -12,6 +12,8 @@ import { SourceMapConsumer as SourceMapConsumerWasm } from 'source-map-wasm'; const dir = relative(process.cwd(), dirname(fileURLToPath(import.meta.url))); +console.log(`node ${process.version}\n`); + async function bench(file) { const map = JSON.parse(readFileSync(join(dir, file))); const encodedMapData = map; @@ -39,7 +41,7 @@ async function bench(file) { new SourceMapConsumer061(encodedMapData).originalPositionFor({ line: 1, column: 0 }); }) // WASM isn't tested because its async and OOMs. - // .add('source-map-0.7.3: encoded Object input', () => { }) + // .add('source-map-0.8.0: encoded Object input', () => { }) // add listeners .on('error', ({ error }) => console.error(error)) @@ -94,7 +96,7 @@ async function bench(file) { const column = line[j][0]; smc061.originalPositionFor({ line: i + 1, column }); }) - .add('source-map-0.7.3: encoded originalPositionFor', () => { + .add('source-map-0.8.0: encoded originalPositionFor', () => { const i = Math.floor(Math.random() * lines.length); const line = lines[i]; if (line.length === 0) return; diff --git a/benchmark/package-lock.json b/benchmark/package-lock.json index 1ff0877..9fcd986 100644 --- a/benchmark/package-lock.json +++ b/benchmark/package-lock.json @@ -8,7 +8,22 @@ "devDependencies": { "source-map": "0.6.1", "source-map-js": "1.0.2", - "source-map-wasm": "npm:source-map@0.7.3" + "source-map-wasm": "npm:source-map@0.8.0-beta.0" + } + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" } }, "node_modules/source-map": { @@ -31,16 +46,57 @@ }, "node_modules/source-map-wasm": { "name": "source-map", - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, "engines": { "node": ">= 8" } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } } }, "dependencies": { + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -54,10 +110,39 @@ "dev": true }, "source-map-wasm": { - "version": "npm:source-map@0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "npm:source-map@0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } } } } diff --git a/benchmark/package.json b/benchmark/package.json index cc450d0..59a9ce8 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -3,6 +3,6 @@ "devDependencies": { "source-map": "0.6.1", "source-map-js": "1.0.2", - "source-map-wasm": "npm:source-map@0.7.3" + "source-map-wasm": "npm:source-map@0.8.0-beta.0" } }