我知道做多個dom操作是不好的,因爲它會強制多次重繪。「虛擬」dom操縱?
即:
$('body').append('<div />')
.append('<div />')
.append('<div />')
.append('<div />');
取而代之的是更好的做法顯然是:
$('body').append('<div><div></div><div></div><div></div><div></div></div>');
但我好奇的虛擬操作
即:
$('<div />').append('<div />')
.append('<div />')
.append('<div />')
.append('<div />')
.appendTo('body');
是仍然不好,很明顯,調用一個函數會有一些開銷,但是會有什麼嚴重的性能命中?
原因,我問的是這樣的:
var divs = [
{text: 'First', id: 'div_1', style: 'background-color: #f00;'},
{text: 'Second', id: 'div_2', style: 'background-color: #0f0;'},
{text: 'Third', id: 'div_3', style: 'background-color: #00f;'},
{text: 'Fourth', id: 'div_4', style: 'background-color: #f00;'},
{text: 'Fifth', id: 'div_5', style: 'background-color: #0f0;'},
{text: 'Sixth', id: 'div_6', style: 'background-color: #00f;'}
];
var element = $('<div />');
$.each(divs, function(i,o){
element.append($('<div />', o));
});
$('body').append(element);
想像一下div的陣列已經從描述形式的數據庫表(好吧,我使用的div的例子,但也可以是很容易取代輸入)或類似的東西。
或「推薦」的版本中,我們有:
var divs = [
{text: 'First', id: 'div_1', style: 'background-color: #f00;'},
{text: 'Second', id: 'div_2', style: 'background-color: #0f0;'},
{text: 'Third', id: 'div_3', style: 'background-color: #00f;'},
{text: 'Fourth', id: 'div_4', style: 'background-color: #f00;'},
{text: 'Fifth', id: 'div_5', style: 'background-color: #0f0;'},
{text: 'Sixth', id: 'div_6', style: 'background-color: #00f;'}
];
var element = '<div>';
$.each(divs, function(i,o){
element += '<div ';
$.each(o, function(k,v){
if(k != 'text'){
element += k+'="'+v+'" ';
}
});
element += '>'+o.text+'</div>';
});
element += '</div>';
$('body').append(element);
@nathan草場:「好像它仍然很糟糕」 ---爲何如此? 「爲什麼不使用」---爲什麼不把它保持原樣呢? – zerkms
@nathan hayfield:「快得多」?你可以告訴** REAL **區別5個「附加」調用vs連接嗎?該代碼是爲人們編寫的,它只是優化**它不符合性能要求。 – zerkms
重繪可能會推遲到您處理的事件完成之後。 – millimoose