DocumentFragment
Однако если мы будем использовать DocumentFragment
для совершения тех же самых операций, то ситуация изменится. Для начала мы добавим все наши узлы к самому фрагменту (используя имеющийся метод createDocumentFragment
).
Самое интересное начинается тогда, когда мы собираемся добавить сами узлы в документ: нам нужно вызвать по одному разу appendChild
и cloneNode
для всех узлов!
var div = document.getElementsByTagName("div");var fragment = document.createDocumentFragment(); for ( var e = 0; e < elems.length; e++ ) { fragment.appendChild( elems[e] ); } for ( var i = 0; i < div.length; i++ ) { div[i].appendChild( fragment.cloneNode(true) ); }
При проведении замеров времени можно увидеть следующую картину (табл. 7.2).
Браузер | Нормальный | Fragment | Firefox 3.0.1 | 90 | 47 |
---|---|---|
Safari 3.1.2 | 156 | 44 |
Opera 9.51 | 208 | 95 |
IE 6 | 401 | 140 |
IE 7 | 230 | 61 |
IE 8b1 | 120 | 40 |
Таблица 7.2. Сравнение методов работы с DOM-деревом, результаты в миллисекундах