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
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<div id="insertHere"></div>
<script>
var insertHere = document.getElementById("insertHere");
for(var i = 0; i<50; i++) {
var div = document.createElement('DIV')
div.innerHTML = '1';
insertHere.appendChild(div);
}
var div = document.createElement('DIV')
div.innerHTML = '2';
div.id = 'whereami';
insertHere.appendChild(div);
</script>
function findRow(node) {
var i = 1;
while (node.previousSibling) {
node = node.previousSibling;
if (node.nodeType === 1) {
i++;
}
}
return i;
}
function findRow2(node) {
return $(node).index();
}
function findRow3(node) {
var i = 1;
while (node = node.previousSibling) {
if (node.nodeType === 1) {
++i
}
}
return i;
}
function findRow4(node) {
return [].indexOf.call(node.parentNode.children, node)
}
(function() {
var fn = document.body.previousElementSibling ? 'previousElementSibling' : 'previousSibling'; // ie <=8 skips text nodes
findRow5 = function(node) {
var i = 1;
while (node = node[fn]) {
++i
}
return i;
}
}());
//previousSibling - good if there are no text nodes
findRow6 = function(node) {
var i = 1;
while (node = node.previousSibling) {
++i
}
return i;
}
//previousSibling - good if there are no text nodes
function findRow6(node) {
var i = 1;
while (node = node.previousSibling) {
++i
}
return i;
}
function findRow7(node) {
var children = node.parentNode.childNodes;
for (var i = 0; i < children.length; i++) {
if (children[i] === node) {
return i;
}
}
}
var node = document.getElementById('whereami'); //div node to find
Ready to run.
Test | Ops/sec | |
---|---|---|
Original |
| ready |
jQuery |
| ready |
Jack's one |
| ready |
Using Array.indexOf |
| ready |
using conditional function |
| ready |
previousSibling - good if there are no text nodes |
| ready |
loop through childNodes |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.