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-деревом, результаты в миллисекундах