Document fragment vs innerHTML vs looped appendChild (v11)

Revision 11 of this benchmark created by Winston on


Preparation HTML

<div id="my-div">
</div>

Setup

var div = document.getElementById('my-div')

Teardown



            while (div.firstChild) div.removeChild(div.firstChild);
        
  

Test runner

Ready to run.

Testing in
TestOps/sec
innerHTML (append)
var i = 0;

while (i < 20) {
  div.innerHTML += '<li>This is my list item number ' + i + '</li>';
  i++;
}
ready
Looped appendChild
var i = 0;

while (i < 20) {
  var el = document.createElement('li');
  el.innerText = 'This is my list item number ' + i;
  div.appendChild(el);
  i++;
}
ready
Document fragment
var i = 0,
  fragment = document.createDocumentFragment();

while (i < 20) {
  var el = document.createElement('li');
  el.innerText = 'This is my list item number ' + i;
  fragment.appendChild(el);
  i++;
}

div.appendChild(fragment);
ready
innerHTML (single)
var i = 0;
var html = "";

while (i < 20) {
  html += '<li>This is my list item number ' + i + '</li>';
  i++;
}
div.innerHTML = html;
ready
Document fragment + innerHTML (append)
var i = 0,
  fragment = document.createDocumentFragment(),
  wrapper = document.createElement('div');

fragment.appendChild(wrapper);
while (i < 20) {
  wrapper.innerHTML += '<li>This is my list item number ' + i + '</li>';
  i++;
}

div.appendChild(fragment);
ready
Document fragment + innerHTML (single)
var i = 0,
  fragment = document.createDocumentFragment(),
  wrapper = document.createElement('div'),
  html = '';

fragment.appendChild(wrapper);
while (i < 20) {
  html += '<li>This is my list item number ' + i + '</li>';
  i++;
}
wrapper.innerHTML = html;

div.appendChild(fragment);
ready
innerHTML single list
var i = 0;
var html = [];

while (i < 20) {
  html.push('<li>This is my list item number ' + i + '</li>');
  i++;
}
div.innerHTML = html.join("")
ready

Revisions

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