Saya sedang membaca tentang fragmen dokumen dan perubahan posisi DOM dan bertanya-tanya seberapa document.createDocumentFragment
berbeda dari document.createElement
yang terlihat seperti keduanya tidak ada di DOM sampai saya menambahkannya ke elemen DOM.
Saya melakukan tes (di bawah) dan semuanya membutuhkan waktu yang sama persis (sekitar 95ms). Diperkirakan, hal ini mungkin karena tidak ada gaya yang diterapkan ke salah satu elemen, jadi mungkin tidak ada perubahan posisi.
Bagaimanapun, berdasarkan contoh di bawah ini, mengapa saya harus menggunakan createDocumentFragment
daripada createElement
saat memasukkan ke dalam DOM dan apa perbedaan antara keduanya.
var htmz = "<ul>";
for (var i = 0; i < 2001; i++) {
htmz += '<li><a href="#">link ' + i + '</a></li>';
}
htmz += '<ul>';
//createDocumentFragment
console.time('first');
var div = document.createElement("div");
div.innerHTML = htmz;
var fragment = document.createDocumentFragment();
while (div.firstChild) {
fragment.appendChild(div.firstChild);
}
$('#first').append(fragment);
console.timeEnd('first');
//createElement
console.time('second');
var span = document.createElement("span");
span.innerHTML = htmz;
$('#second').append(span);
console.timeEnd('second');
//jQuery
console.time('third');
$('#third').append(htmz);
console.timeEnd('third');
sumber
createFragment
dancreateElement
dalam memori memiliki efek yang kira-kira sama karena keduanya memperbarui DOM secara batch alih-alih memperbarui secara berulang untuk beberapa kali. Meskipun manfaat utamanyacreateFragment
adalah ia menawarkan Anda fleksibilitas untuk memilih elemen turunan apa pun yang akan ditambahkan secara gratis? Koreksi saya jika saya salah.Perbedaan lain yang sangat penting antara membuat elemen dan fragmen dokumen:
Saat Anda membuat elemen dan menambahkannya ke DOM, elemen tersebut ditambahkan ke DOM, serta anak-anak.
Dengan fragmen dokumen, hanya anak-anak yang ditambahkan.
Ambil contoh kasus:
yang menghasilkan format HTML yang salah ini (spasi ditambahkan)
sumber