innerHTML vs. cloneNode

Benchmark created by Kevin Decker on


Preparation HTML

<div id="destination"></div>
<script>
  var content = '<div class="test"><span style="color: red">Wooo Text!</span></div><div>More text!</div>',
      dest = document.getElementById("destination");
  
  // For Element cloneNode test
  var womb = document.createElement("div");
  womb.innerHTML = content;
  
  // For doc fragment test
  var frag = document.createDocumentFragment(),
      clone = womb.cloneNode(true),
      len = clone.childNodes.length;
  while (len--) {
   frag.appendChild(clone.childNodes[0]);
  }
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
innerHTML
dest.innerHTML = content;
ready
cloneNode
dest.innerHTML = "";
var clone = womb.cloneNode(true),
    len = clone.childNodes.length;
while (len--) {
 dest.appendChild(clone.childNodes[0]);
}
ready
DocumentFragment
dest.innerHTML = "";
dest.appendChild(frag.cloneNode(true));
ready
DOM post insert
dest.innerHTML = "";

var child = document.createElement('div');
child.className = "test";

var subChild = document.createElement('span');
subChild.style.color = "red";
subChild.appendChild(document.createTextNode("Wooo Text!"));
child.appendChild(subChild);
dest.appendChild(child);


child = document.createElement('div');
child.appendChild(document.createTextNode("More text!"));
dest.appendChild(child);
ready
DOM pre insert
dest.innerHTML = "";

var child = document.createElement('div');
dest.appendChild(child);
child.className = "test";

var subChild = document.createElement('span');
child.appendChild(subChild);
subChild.style.color = "red";
subChild.appendChild(document.createTextNode("Wooo Text!"));

child = document.createElement('div');
dest.appendChild(child);
child.appendChild(document.createTextNode("More text!"));
ready

Revisions

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