deno.land / x / microdiff@v1.4.0 / bench.js

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import deepDiff from "deep-diff";import { detailedDiff } from "deep-object-diff";import { diffJson } from "diff";import microdiff from "./dist/index.js";import { hrtime } from "node:process";import colors from "picocolors";const characters = "abcdefghijklmnopqrstuvwxyz1234567890".split("");
async function benchmark(name, obj, newObj, exclude = []) { const benchmarks = { "deep-diff": () => deepDiff.diff(obj, newObj), "deep-object-diff": () => detailedDiff(obj, newObj), jsdiff: () => diffJson(obj, newObj), microdiff: () => microdiff(obj, newObj), }; let times = {}; for (let benchmark in benchmarks) { if (exclude.includes(benchmark)) { continue; } times[benchmark] = []; for (let i = 1; i < 10000; i++) { let time = hrtime(); benchmarks[benchmark](); times[benchmark].push(hrtime(time)[1]); } times[benchmark] = times[benchmark].reduce((pv, nv) => pv + nv) / times[benchmark].length; } let output = []; let fastest = ""; for (let time in times) { if (!fastest || times[time] < times[fastest]) { fastest = time; } } for (let time in times) { output.push( `${time}: ${Math.round(times[time])}ns - ${ fastest === time ? colors.bold(colors.green("Fastest")) : `${Math.round((times[time] / times[fastest] - 1) * 100)}% slower` }` ); } console.log( colors.bold(colors.green(`Benchmarks: ${name}\n`)) + output.join("\n") );}console.log(colors.bold("Starting Benchmark"));benchmark( "Small object (baseline)", { name: "Testing", propertyTwo: "Still testing...", }, { name: "TestingChanged", propertyThree: "Still testing...", });let largeObj = {};let i = 0;while (i < 300) { let randomString = ""; for (let characterCount = 0; characterCount < 5; characterCount++) { randomString += characters[Math.round(Math.random() * characters.length)]; } if (!largeObj[randomString]) { largeObj[randomString] = Math.random() * 100; i++; }}let newLargeObj = {};for (let randomProperty in largeObj) { if (Math.random() > 0.95) { newLargeObj[randomProperty] = Math.random() * 100; } else if (!Math.random() < 0.975) { newLargeObj[randomProperty] = largeObj[randomProperty]; }}benchmark("Large Object (300 properties)", largeObj, newLargeObj);
microdiff

Version Info

Tagged at
a month ago