parent Nodecached vs noncached (v9)

Revision 9 of this benchmark created on


Description

Speed difference impressive between cached dom reference and no cached access and

Preparation HTML

<div id="parent">
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
<div class="child"></div>
<div class="otherchild"></div>
 <div class="child"></div>
<div class="otherchild"></div>
</div>

Setup

var gchild = document.querySelectorAll('.child');

Test runner

Ready to run.

Testing in
TestOps/sec
nocache parentNode
for (var i = 0; i < gchild.length; i++) {
  if (!gchild[i].innerHTML) {
    gchild[i].nextElementSibling.previousElementSibling.nextElementSibling.previousElementSibling.style.color = 'red';
    gchild[i].nextElementSibling.previousElementSibling.nextElementSibling.previousElementSibling.style.color = 'blue';

    gchild[i].nextElementSibling.previousElementSibling.nextElementSibling.previousElementSibling.style.color = 'orange';

    gchild[i].nextElementSibling.previousElementSibling.nextElementSibling.previousElementSibling.style.color = 'yellow';




  } else {
    gchild[i].parentNode.style.color = 'red';
    gchild[i].parentNode.style.width = '300';
  }

}
ready
dom cached
var domcached;

var i;
for (i = 0; i < gchild.length; i++) {
  domcached = gchild[i].nextElementSibling.previousElementSibling.nextElementSibling.previousElementSibling;

  if (!gchild[i].innerHTML) {
    domcached.style.color = 'red';
    domcached.style.color = 'blue';
    domcached.style.color = 'orange';
    domcached.style.color = 'yellow';




  } else {
    domcached.style.color = 'red';
    domcached.style.width = '300';
  }

}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.