jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
const NUMBER_OF_ITEMS_IN_TESTDATA = 8;
const shuffleArr = (target) => {
let i = target.length;
let j = 0;
let temp;
while (i--) {
j = Math.floor(Math.random() * (i + 1));
temp = target[i];
target[i] = target[j];
target[j] = temp;
}
};
const createTestData = (n) => {
const data = [];
for (let i = 0; i < n; i++) {
data.push({
id: i,
parent_id: null
});
}
for (let i = 1; i < n; i++) {
data[i].parent_id = Math.floor(Math.random() * i);
}
shuffleArr(data);
data[Math.floor(Math.random() * n)].parent_id = null;
return data;
};
const makeTree1 = (data, parent_id = null) => {
const tree = [];
let children = [];
const length = data.length;
for (let i = 0; i < length; i++) {
if (data[i].parent_id === parent_id) {
children = makeTree1(data, data[i].id);
if (children.length) {
data[i].children = children;
}
tree.push(data[i]);
}
}
return tree;
};
const makeTree2 = (data, parent_id = null) => {
const tree = [];
const length = data.length;
for (let i = 0; i < length; i++) {
if (data[i].parent_id === parent_id) {
data[i].children = makeTree2(data, data[i].id);
tree.push(data[i]);
}
}
return tree;
};
const makeTree3 = (data, parent_id = null) => {
const tree = [];
const length = data.length;
for (let i = 0; i < length; i++) {
if (data[i].parent_id === parent_id) {
tree.push(data[i]);
}
}
for (let i = 0; i < tree.length; i++) {
tree[i].children = makeTree3(data, tree[i].id);
}
return tree;
};
const makeTree4 = (data, parent_id = null) => {
const tree = [];
let i = data.length;
for (; i-- ;) {
if (data[i].parent_id === parent_id) {
data[i].children = makeTree4(data, data[i].id);
tree.push(data[i]);
}
}
return tree;
};
const makeTree5 = (data, parent_id = null) => {
const tree = [];
let i = data.length;
for (; i-- ;) {
if (data[i].parent_id === parent_id) {
tree.push(data[i]);
}
}
i = tree.length;
for (; i-- ;) {
tree[i].children = makeTree5(data, tree[i].id);
}
return tree;
};
const makeTree6 = (data, parent_id = null) => {
let tree = [];
let children = [];
for (let i = 0; i < data.length; i++) {
if (data[i].parent_id === parent_id) {
children = makeTree6(data, data[i].id);
if (children.length) {
data[i].children = children;
}
tree.push(data[i]);
}
}
return tree;
};
const makeTree7 = (data, parent_id = null) => {
let tree = [];
let children = [];
let i = data.length;
for (; i-- ;) {
if (data[i].parent_id === parent_id) {
children = makeTree7(data, data[i].id);
if (children.length) {
data[i].children = children;
}
tree.push(data[i]);
}
}
return tree;
};
const makeTree8 = (data, parent_id = null) => {
let tree = [];
let children = [];
let i = data.length;
while (i--) {
if (data[i].parent_id === parent_id) {
children = makeTree8(data, data[i].id);
if (children.length) {
data[i].children = children;
}
tree.push(data[i]);
}
}
return tree;
};
const data = createTestData(NUMBER_OF_ITEMS_IN_TESTDATA);
Ready to run.
Test | Ops/sec | |
---|---|---|
makeTree1 |
| ready |
makeTree2 |
| ready |
makeTree3 |
| ready |
makeTree4 |
| ready |
makeTree5 |
| ready |
makeTree6 |
| ready |
makeTree7 |
| ready |
makeTree8 |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.