jquery HTML element creation techniques

Benchmark created by lodr on


Description

Attemps to dilucidate which option is more suitable for fast DOM manipulation: jQuery string creation, jQuery DOM manipulation methods or Javascript's documentFragment use.

Preparation HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>
<ul id="test-list">
</ul>
<script>
  var $list = $('#test-list');
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
jQuery string creation
$list.empty();
var str = '';
for (var i = 0; i < 100; i++) {
  str += '<li>' + i + '</li>';
}
$list.html(str);
ready
jQuery DOM manipulation methods
$list.empty();
for (var i = 0; i < 100; i++) {
  var $li = $('<li>').detach().html(i);
  $list.append($li);
}
ready
Javascript's documentFragment
$list.empty();
var container = document.createDocumentFragment();
for (var i = 0; i < 100; i++) {
  var li = document.createElement('li');
  li.innerHTML = i;
  container.appendChild(li);
}
$list.html(container);
ready
Javascript's document manipulation
var container = document.getElementById('test-list');
container.innerHTML = '';
for (var i = 0; i < 100; i++) {
  var li = document.createElement('li');
  li.innerHTML = i;
  li.setAttribute('title', 'Element number ' + i);
  li.setAttribute('class', 'list-item');
  container.appendChild(li);
}
ready
jQuery DOM manipulation methods (fragment/DOM hybrid)
$list.empty();
var container = document.createDocumentFragment();
for (var i = 0; i < 100; i++) {
  var $li = $('<li>').detach().html(i);
  container.appendChild($li[0]);
}
$list.html(container);
ready

Revisions

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