vostro first link riferisce al blog post dove l'autore utilizza document.getElementsByTagName
anziché document.getElementById
, come nel caso di test. Se si desidera un più elementi (vale a dire: div) da dare lo stesso documentFragment
, è necessario clonarlo:
Se bambino è un riferimento a un nodo esistente nel documento, appendChild si muove dalla sua posizione attuale la nuova posizione (ovvero non è necessario rimuovere il nodo dal nodo principale prima di aggiungerlo ad un altro nodo).
Ciò significa anche che un nodo non può essere in due punti del documento contemporaneamente. Quindi se il nodo ha già un genitore, viene prima rimosso, quindi aggiunto alla nuova posizione.
via MDN
Molto probabilmente l'autore (o qualcun altro) copia-incollato il codice senza prendere in considerazione questo. Provalo tu stesso: puoi utilizzare appendChild
senza cloneNode
e tutto funziona correttamente.
Un'altra possibilità è che qualcuno che ha creato questo test case su jsperf non abbia ottenuto molto come funziona il codice di preparazione ed era preoccupato che il primo test svuoterebbe l'array aElms
e non funzionerà più. Il codice di preparazione In fact viene eseguito prima di ogni iterazione temporizzata, quindi non è necessario preoccuparsi dei suoi contenuti.
L'ultima cosa riguarda le prestazioni. Se si desidera testare realmente l'inserimento reale , è necessario clonare il nodo. In caso contrario, testare l'albero ricollegamento (vedere il link MDN sopra).
Si prega di notare che cloning destroys event listeners.
Felice frammento! ;)
+1, molto interessante. La mia unica (e piuttosto selvaggia) ipotesi è che l'utilizzo di 'cloneNode' ci dia un controllo migliore sull'ambito' oFrag'. – raina77ow
Non penso che questo meriti di essere forgiato in una risposta completa, ma comunque ... Semplicemente cercando 'documentFragment cloneNode' ho trovato [questo post] (http://ejohn.org/blog/dom- documentfragments /) di John Resig.) Nell'argomento di questo post un gruppo di nodi dovrebbe essere inserito in DOM _several_ volte, quindi la clonazione del documentoFragment è davvero una scelta migliore. – raina77ow