Первое, что мы должны знать, почему createDocument()
может быть медленным.Причина в том, что DOM активен, и если вы изменяете его, он запускает повторную проверку дерева DOM и, возможно, перерисовывает сайт.Каждый раз.Но мы могли бы избежать этой ненужной повторной проверки и перерисовки, используя createDocumentFragment () .DocumentFragment не является частью DOM и поэтому не будет вызывать никаких событий.Таким образом, вы можете построить свою полную часть DOM и на последнем шаге добавить ее в дерево DOM.Я думаю, что это самый быстрый способ создания больших деталей DOM.
ОБНОВЛЕНИЕ Я протестировал его в Firefox 7 с помощью Firebug.Код:
console.time("a");
for(var i=0; i<1000; i++) {
$.parseXML("<person><name>Bob</name><relation>Uncle</relation></person>")
}
console.timeEnd("a");
console.time("b");
for(var i=0; i<1000; i++) {
var myXdoc
if (document.createDocumentFragment) {
myXdoc = document.createDocumentFragment();
}
var p = myXdoc.appendChild(document.createElement("person"));
var n = p.appendChild(document.createElement("name"));
n.appendChild(document.createTextNode("Bob"));
var r = p.appendChild(document.createElement("relation"));
r.appendChild(document.createTextNode("Uncle"));
}
console.timeEnd("b");
Результат: «а» около 140мс и «б» около 35мс.Так что версия для разбора строк медленнее.
UPDATE2 Весьма вероятно, что второй вариант быстрее в любом другом браузере.Потому что метод parse также должен создавать объект DOM и очень вероятно, что он использует те же методы (например: document.createElement
).Таким образом, метод разбора не может быть быстрее.Но он медленнее, потому что сначала нужно разобрать строку.