Tôi đã reading about document fragments và DOM reflow và tự hỏi làm thế nào document.createDocumentFragment
khác với document.createElement
vì có vẻ như không tồn tại trong DOM cho đến khi tôi thêm chúng vào phần tử DOM.Tôi có thể sử dụng document.createDocumentFragment hoặc document.createElement
Tôi đã làm một thử nghiệm (bên dưới) và tất cả chúng đều chính xác cùng một lượng thời gian (khoảng 95ms). Tại một đoán này có thể có thể là do không có phong cách áp dụng cho bất kỳ các yếu tố, do đó, không có reflow có thể.
Dù sao, dựa trên ví dụ bên dưới, tại sao tôi nên sử dụng createDocumentFragment
thay vì createElement
khi chèn vào DOM và sự khác biệt giữa hai.
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');
này nghe có vẻ như một công việc cho jsperf. Vâng? Không? – Nenotlep