getElementsByTagName vs treeWalker

JavaScript performance comparison

Revision 4 of this test case created by Chen-Pang He

Preparation code

<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<div>
  <div>
    <div l10n-id="a">
      <ul>
        <li>
        </li>
        <li>
        </li>
      </ul>
    </div>
  </div>
</div>
<script>
Benchmark.prototype.setup = function() {
    var selected = [];
    var nodes = document.body.getElementsByTagName('div', 'li');
    var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, {
      acceptNode: function(node) {
        if (node.hasAttribute('l10n-id')) {
          return NodeFilter.FILTER_ACCEPT;
        } else {
          return NodeFilter.FILTER_SKIP;
        }
      }
    });
};
</script>

Preparation code output

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
getElementsByTagName
var length = nodes.length;
for (var i = 0; i < length; i++) {
  if (nodes[i].hasAttribute('l10n-id')) {
    selected.push(nodes[i]);
  }
}
pending…
treeWalker
while (treeWalker.nextNode()) {
  selected.push(treeWalker.currentNode);
}
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment