Javascript在appendChild方法上的效率改进
Javascript efficiency improvement on appendChild Method
我想修改下面的Java脚本,使其更有效
for(var i = 0; i < 1000; i += 1){
var el = document.createElement('div');
el.appendChild(document.createTextNode('Node ' + (i + 1)));
document.getElementById('nodeHolder').appendChild(el);
}
理想情况下,如果能提供背后的原因,将不胜感激。
创建一个文档片段并对其进行追加,然后对整个集合执行单个追加。
var frag = document.createDocumentFragment();
for(var i = 0; i < 1000; i += 1){
var el = document.createElement('div');
el.appendChild(document.createTextNode('Node ' + (i + 1)));
frag.appendChild(el);
}
document.getElementById('nodeHolder').appendChild( frag );
现在你的getElementById
只需要运行一次,DOM只需要更新一次。
如果你愿意,你可以把代码压缩一点:
例子: http://jsfiddle.net/7hagb/
var frag = document.createDocumentFragment();
for(var i = 0; i < 1000; i += 1){
frag.appendChild(document.createElement('div'))
.appendChild(document.createTextNode('Node ' + (i + 1)));
}
document.getElementById('nodeHolder').appendChild( frag );
另外,一个非常小的优化是去掉i + 1
,并修改for
循环以提供您想要的值。
例子: http://jsfiddle.net/7hagb/1/
var frag = document.createDocumentFragment();
for(var i = 1; i <= 1000; i += 1){
frag.appendChild(document.createElement('div'))
.appendChild(document.createTextNode('Node ' + i));
}
document.getElementById('nodeHolder').appendChild( frag );
你可以使用DocumentFragment,这是一个轻量级的节点容器,当你在上面添加节点时,它可以防止DOM刷新和回流。
var nodeHolder = document.createElement('div'),
fragment = document.createDocumentFragment();
for (var i = 0; i < 1000; i ++ ) {
var el = document.createElement('div');
el.innerHTML = 'Node ' + (i + 1);
fragment.appendChild(el);
}
nodeHolder.appendChild(fragment);
不要使用DOM,只用html代替。例如,使用
代替createElement abc = ""
for(...){
abc += "<div>Text " + i + "</div>";
}
,然后追加到目标。它很丑,我同意,但应该运行得快得多
相关文章:
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- Node.js中的JavaScript原型对象效率
- jquery扩展了崩溃效率
- appendChild在函数外部工作,但在函数内部不工作
- 我该如何解决这个问题?“未捕获的类型错误:无法读取 null 的属性'appendChild'”
- 元素.appendChild()插入IE.变通方法?(与innerText与textContent相关)
- 为什么不是't我的appendChild正在使用createDocumentFragment
- 使用appendChild()动态添加的脚本是按顺序执行还是并行执行
- React AppendChild组件没有'不起作用
- 效率:整数数组的一个子集中两个项之间的最大差值
- 不显示为表单元素的图像输入按钮的动态创建和appendChild
- AppendChild Form / Table [Javascript/Html/PHP]
- javascript对象与阅读文档——初学者查询效率
- 提高敲除自定义绑定的效率(经常开火)
- 如何在 JavaScript 中减少两个循环以提高效率
- 收到错误:无法在“节点”上执行“appendChild”:参数 1 的类型不是“节点”
- Node.appendChild的参数1不是对象
- 无法调用方法'appendChild'为null
- 多DOM appendChild的速度/效率
- Javascript在appendChild方法上的效率改进