forked from developit/vhtml
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbench.js
123 lines (113 loc) · 3.3 KB
/
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import microBenchmark from 'micro-benchmark';
import stringjsx from './src/stringjsx.js';
import vhtml from './misc/vhtml.js';
const runningInBrowser = !!globalThis.document;
console.log('runningInBrowser:', runningInBrowser, '\n');
if (runningInBrowser) {
document.body.innerHTML = '' +
'<div id="results"></div>' +
'<div id="state">ready</div>' +
'<button id="start">run benchmark</button>'
;
document.body
.querySelector('#start')
.addEventListener('click', () => {
document.querySelector('#start').style.display = "none";
document.querySelector('#state').textContent = 'benchmarking...';
setTimeout(() => { doBenchmarking(); });
});
} else {
doBenchmarking();
}
function variableName(object) {
Object.keys({object})[0]
}
function doBenchmarking() {
const specs = Array([stringjsx, 'stringjsx'], [vhtml, 'vhtml'])
.flatMap(([h, rendererName]) => {
return [
{
name: rendererName + ' - render a p tag (not compiled)',
fn: function() {
return h('p', {class: 'text'}, 'lol');
},
},
{
name: rendererName + ' - render a p tag',
fn: function() {
return (<p class="text">lol</p>);
},
},
{
name: rendererName + ' - render a 1 child structure',
fn: function() {
return (<div>
<p class="f-text r-text">lolem ipsum</p>
</div>);
},
},
{
name: rendererName + ' - render a complex structure',
fn: function() {
return (<div class="container">
<h3>lorem</h3>
<p class="description">ipsum</p>
<table>
<tbody>
<tr>
<div class="realdata">
<span class="make-it-pretty">data</span>
</div>
</tr>
</tbody>
</table>
</div>);
},
},
{
name: rendererName + ' - render a complex structure w/ pseudo-components',
fn: function() {
const Item = ({item, index, children}) => (
<tr>
<li id={index}>
<h4>{item}</h4>
{children}
</li>
</tr>
);
const MyTable = ({children}) => (
<table class="mytable">
<tbody>
{children}
</tbody>
</table>
);
return (<div class="my-page">
<MyTable>
<Item item="1">stuff</Item>
<Item item="2">things</Item>
<Item item="3">lols</Item>
</MyTable>
</div>)
},
},
]
});
const result = microBenchmark.suite({
duration: 500,
maxOperations: 100000,
specs,
});
const report = microBenchmark.report(result);
console.log(report);
if (runningInBrowser) {
const reportTag = document.createElement('pre');
reportTag.textContent = report;
document.body
.querySelector('#results')
.appendChild(reportTag)
;
document.querySelector('#start').style.display = "block";
document.querySelector('#state').textContent = 'ready';
}
}