className VS classList Showdown

JavaScript performance comparison

Revision 5 of this test case created by Marcin

Preparation code

<style type="text/css">
  .foo { color:#F00; height:100px; opacity:0.3; } .bar { color:#0F0; height:200px;
  opacity:0.5; } .baz { color:#00F; height:300px; opacity:0.7; }
</style>
<div id="base" class="foo bar">
  <div class="foo bar baz">
    test 1
  </div>
  <span class="foo bar">
    test 2
  </span>
  <span class="baz">
    test 3
  </span>
</div>
      
<script>
Benchmark.prototype.setup = function() {
  var node = document.getElementById('base'),
      className = 'baz';
  
  function addClass_className(el, className) {
    el.className += " " + className;
  }
  
  
  function removeClass_className(ele, cls) {
    var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
    ele.className = ele.className.replace(reg, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, ''); //last 2 replaces do right trim (see http://blog.stevenlevithan.com/archives/faster-trim-javascript)
  }

};

Benchmark.prototype.teardown = function() {
  node.className = '';

};
</script>

Preparation code output

<style type="text/css"> .foo { color:#F00; height:100px; opacity:0.3; } .bar { color:#0F0; height:200px; opacity:0.5; } .baz { color:#00F; height:300px; opacity:0.7; } </style> <div id="base" class="foo bar"> <div class="foo bar baz"> test 1 </div> <span class="foo bar"> test 2 </span> <span class="baz"> test 3 </span> </div>

Test runner

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

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
classList (add)
node.classList.add('foo');
node.classList.add('bar');
node.classList.add('baz');
pending…
className (add) walkontable 0.2.0
addClass_className(node, 'foo');
addClass_className(node, 'bar');
addClass_className(node, 'baz');
pending…
className raw
node.className = 'foo bar baz';
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.

0 Comments

test 1
test 2 test 3