Вернусь к первому вопросу.
Столкнулся с одной интересной вещью. Есть код:
var fragment = document.createDocumentFragment();
for(var i = 0; i < 10000; i++){
fragment.appendChild(document.createElement('div'));
}
document.body.appendChild(fragment);
Далее тестируем производительность в мозилле:
var arr = Array.prototype.slice.call(document.getElementsByTagName('div'));
var elems = document.getElementsByTagName('div');
console.time('While');
var l = elems.length;
var arrWhile = [];
while(l){
arrWhile.push(elems[--l]);
}
console.timeEnd('While');
У меня показывает 9 ms. Если убрать первую строку или поменять 'div' на '*' (либо другой какой тег) в этой строке, начинает показывать 17 ms.
Это что? Кеширование?