【发布时间】:2016-05-05 07:02:40
【问题描述】:
我需要创建一个流脚本,每秒在不同列中插入 1000 个元素,当数量达到每列 30 个元素时,我将删除它们。
我注意到我可以使用 CSS 插入我的数据,当我假设 100 列和 50 行时,DOM 元素的绝对数量会减慢;整个过程变得波涛汹涌。
我正在创建元素并存储在数组中以提高性能。
如何在纯 JavaScript 中以更好的性能执行此任务?
https://jsfiddle.net/r7qpmd4o/4/
<script>
var elems = [],
buffer = 1000,
temp_row,
temp_col,
temp_var;
// run
create();
clock();
function clock() {
setInterval(function() {
for(var i = 0; i < 10; i++) {
temp_col = document.getElementById('col' + i);
temp_row = pop();
if(temp_col.firstChild) {
temp_col.insertBefore(temp_row, temp_col.firstChild);
}
else {
temp_col.appendChild(temp_row);
}
if(temp_col.childNodes.length > 30) {
temp_col.removeChild(temp_col.childNodes[30]);
}
}
}, 1);
}
function pop() {
if(elems.length < 1) {
create();
}
temp_var = elems[elems.length -1];
elems.pop();
return temp_var;
}
function create() {
for(var i = 0; i < buffer; i++) {
temp_row = document.createElement('div');
temp_row.className = 'a';
elems.push(temp_row);
}
console.log('Elems created: ' + buffer);
}
</script>
【问题讨论】:
-
我打算建议使用 documentFragment ...但我迷路了,试图看看这是否有好处
-
不使用一个计时器,而是让每一列都有自己的计时器怎么样?效果会更好还是更差?
标签: javascript html performance dom dynamic