Skip to content

Commit 138bd0a

Browse files
committed
Merge branch 'mksunny1-Vanillajs-3'
2 parents decd9f1 + 3438f66 commit 138bd0a

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

frameworks/keyed/vanillajs-3/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"vanilla",
1818
"javascript"
1919
],
20-
"author": "Mark Sun",
20+
"author": "Mark Sune",
2121
"license": "Apache-2.0",
2222
"homepage": "https://github.com/krausest/js-framework-benchmark",
2323
"repository": {

frameworks/keyed/vanillajs-3/src/Main.js

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,46 +9,52 @@ function* _random(n) {
99
yield arr
1010
}
1111
}
12-
const data = [], tbody = document.getElementsByTagName('tbody')[0];
13-
let index = 1, i, lbl, selected, temp;
12+
const data = [], nTemplates = 10, tbody = document.getElementsByTagName('tbody')[0];
13+
let index = 1, i, lbl, selected;
1414

15-
function create(e, n = 1000) { if (data.length) clear(e); append(e, n); }
16-
function append(e, n = 1000) {
17-
const [r1, r2, r3] = _random(n);
18-
const itemTemplate = document.getElementById('itemTemplate').content.firstElementChild;
19-
const itemId = itemTemplate.firstElementChild.firstChild, itemLabel = itemTemplate.querySelector('a.lbl').firstChild;
20-
while (--n >= 0) {
21-
itemId.nodeValue = index++;
22-
data.push(itemLabel.nodeValue = `${adjectives[r1[n]]} ${colours[r2[n]]} ${nouns[r3[n]]}`)
15+
function create(n = 1000) { if (data.length) clear(); append(n); }
16+
function append(n = 1000) {
17+
const [r1, r2, r3] = _random(n); let j = 0;
18+
const itemTemplate1 = document.getElementById('itemTemplate').content.firstElementChild;
19+
const itemTemplate = document.createDocumentFragment();
20+
for (i = 0; i < nTemplates; i++) itemTemplate.appendChild(itemTemplate1.cloneNode(true));
21+
const ids = Array.prototype.map.call(itemTemplate.querySelectorAll('td:first-child'), i => i.firstChild)
22+
const labels = Array.prototype.map.call(itemTemplate.querySelectorAll('a.lbl'), i => i.firstChild);
23+
24+
while ((n -= nTemplates) >= 0) {
25+
for (i = 0; i < nTemplates; i++, j++) {
26+
ids[i].nodeValue = index++;
27+
data.push(labels[i].nodeValue = `${adjectives[r1[j]]} ${colours[r2[j]]} ${nouns[r3[j]]}`)
28+
}
2329
tbody.appendChild(itemTemplate.cloneNode(true));
2430
}
2531
}
26-
function update(e) {
32+
function update() {
2733
const labels = tbody.querySelectorAll('a.lbl'), length = labels.length;
2834
for (i = 0; i < length; i += 10) labels[i].firstChild.nodeValue = data[i] += ' !!!';
2935
}
30-
function clear(e) { data.length = 0; tbody.textContent = '' }
36+
function clear() { data.length = 0; tbody.textContent = '' }
3137

32-
function swap(e) {
33-
if (data.length < 999) return;
38+
function swap() {
39+
if (data.length < 999) return; const first = tbody.firstElementChild;
3440
[data[1], data[998]] = [data[998], data[1]];
35-
tbody.replaceChild(tbody.children[1], (temp = tbody.children[998]));
36-
tbody.insertBefore(temp, tbody.children[1]);
41+
tbody.insertBefore(tbody.insertBefore(first.nextElementSibling,
42+
tbody.children[998]).nextElementSibling, first.nextElementSibling);
3743
}
3844
tbody.onclick = (e) => {
3945
e.preventDefault; e.stopPropagation;
4046
if (e.target.matches('a.lbl')) {
41-
const element = e.composedPath()[2];
47+
const element = e.target.parentNode.parentNode;
4248
if (element === selected) selected.className = selected.className ? "" : "danger";
4349
else {
4450
if (selected) selected.className = "";
4551
element.className = "danger"; selected = element
4652
}
4753
} else if (e.target.matches('span.remove')) {
48-
data.splice(Array.prototype.indexOf.call(tbody.children, tbody.removeChild(e.composedPath()[3])), 1);
54+
data.splice(Array.prototype.indexOf.call(tbody.children, tbody.removeChild(e.target.parentNode.parentNode.parentNode)), 1);
4955
}
5056
}
5157
for (let [key, fn] of Object.entries({
52-
run: create, runlots: (e) => create(e, 10000),
58+
run: create, runlots: () => create(10000),
5359
add: append, update, clear, swaprows: swap
54-
})) document.getElementById(key).onclick = (e) => { e.stopPropagation(); fn(e) }
60+
})) document.getElementById(key).onclick = (e) => { e.stopPropagation(); fn() }

0 commit comments

Comments
 (0)