Wiem, że wykonywanie wielu manipulacji w domenie jest złe, ponieważ wymusza wielokrotne odświeżanie."wirtualna" manipulacja domem?
tj:
$('body').append('<div />')
.append('<div />')
.append('<div />')
.append('<div />');
Zamiast lepszą praktyką jest podobno:
$('body').append('<div><div></div><div></div><div></div><div></div></div>');
ale jestem ciekaw wirtualnym manipulacji
tj:
$('<div />').append('<div />')
.append('<div />')
.append('<div />')
.append('<div />')
.appendTo('body');
jest to Nadal jest źle, oczywiście będzie kilka narzutów związanych z wywoływaniem funkcji kilka razy, ale czy będą jakieś poważne hity wydajności?
Powód pytam to:
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);
Wyobraźmy sobie, że tablica DIV ma pochodzić z tabeli bazy danych opisujących postać (ok, używam div w przykładzie, ale może być łatwo zastąpione przez wejścia) lub coś podobnego.
lub z „zalecanych” wersji mamy:
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 hayfield: "wydaje się, że jest nadal zły" - dlaczego tak jest? "dlaczego po prostu nie używać" - i dlaczego nie po prostu zachować go tak, jak jest? – zerkms
@nathan hayfield: "znacznie szybciej" ??? Czy potrafisz powiedzieć różnicę ** REAL ** dla 5 'append' połączeń vs konkatenacji? Kod jest napisany dla ludzi i jest zoptymalizowany ** TYLKO ** nie spełnia wymagań dotyczących wydajności. – zerkms
Repaints są prawdopodobnie odłożone do czasu zakończenia eventu, który już masz. – millimoose