考虑以下三种向
- 中添加
- 元素的方式:
朴素版(速度慢20%):var ul = document.getElementById('targetUl'); for (var i = 0; i < 200; i++) { var li = document.createElement('li'); li.innerHTML = Math.random(); ul.appendChild(li); }
使用JavaScript片段(速度慢4%):var ul = document.getElementById('targetUl'), fragment = document.createDocumentFragment(); for (var i = 0; i < 200; i++) { var li = document.createElement('li'); li.innerHTML = Math.random(); fragment.appendChild(li); } ul.appendChild(fragment);
将内容添加到尚未在DOM中的元素(快1.26%):
var ul = document.createElement('ul'), div = document.getElementById('targetDiv'); for (var i = 0; i < 200; i++) { var li = document.createElement('li'); li.innerHTML = Math.random(); ul.appendChild(li); } div.appendChild(ul);
为什么将DOM元素追加到内存中比将其追加到Fragment中更快?由于Fragment是为此目的而创建的,所以它不应该更快吗?除了在追加之前不需要包含顶级元素外,使用Fragment是否有任何优势?
请查看jsperf的测试输出:http://jsperf.com/javascript-fragments-tests