Quando qualcosa viene aggiunto al DOM in memoria, ciò provoca un riflusso del browser? O è solo quando i pixel sullo schermo dicono di cambiare che avviene il reflow? Ad esempio:Quando qualcosa viene aggiunto al DOM in memoria, ciò provoca un reflow del browser?
Caso 1: elementi Img aggiunte al DOM uno alla volta
var parentDiv = $('#imgHolder');
var imgArray = []; // Array of img paths populated in another function
$.each(imgArray, function()
{
parentDiv.append(createImgEle(this)); // createImgEle() // returns an <img> with the right src
}
Caso 2: elementi Img sono messi in una matrice separata e quindi allegato al DOM
var parentDiv = $('#imgHolder');
var imgArray = []; // Array of img paths populated in another function
var tempArray = []; // Holds the img elements until its fully populated
$.each(imgArray, function()
{
tempArray.push(createImgEle(this));
}
parentDiv.append(tempArray);
caso 3: entrambi i casi 1 o 2 ma in modo predefinito parentDiv è impostato display:none;
e reso visibile dopo la ogni ciclo è fatto.
Fondamentalmente, quello che voglio sapere è, il browser solo inizia a ridursi quando viene detto ai pixel dello schermo di cambiare?
Btw, il codice è solo a scopo di esempio e non in produzione, quindi non sbattere me per eventuali errori di logica. Grazie per qualsiasi consiglio
Nel caso 1, si otterrà un ridisegno per append, e nel caso 2 si otterrà un ridisegno. Caso 3 Non sono sicuro di farlo. Vorrei andare con il caso 2 –
Mi chiedo quali differenze tra i browser ci saranno con questo però. IE lo gestisce diversamente da come dire, Chrome o Firefox? –
La best practice generica (basata su numerose risposte qui e sui forum di jQuery e sulla mia esperienza personale) consiste nell'eseguire solo un'appendice al DOM. Che ciò significhi aggiungere un array tutto in una volta o creare un frammento DOM e aggiungere il contenuto del frammento DOM non ha importanza. Ad ogni modo, stai solo toccando il DOM una volta. –