Я попытался выяснить, что отличает между двумя версиями небольшого фрагмента кода в исполнении. Не пытайтесь понять, для чего это. Это окончательный код после удаления всего остального, чтобы найти проблему с производительностью.javascript performance for Array
function test(){
var start=new Date(), times=100000;
var l=["a","a"];
for(var j=0;j<times;j++){
var result=document.getElementsByTagName(l[0]), rl=result.length;
for(var i=0;i<rl;i++){
l[0]=result[i];
}
}
var end=new Date();
return "by=" + (end-start);
}
Для меня это сниппеты принимает 236ms в Firefox, но если изменить l[0]=result[i];
к l[1]=result[i];
он принимает только 51ms. То же самое произойдет, если я изменю document.getElementsByTagName(l[0])
на document.getElementsByTagName(l[1])
. И если оба изменения, то сниппет снова будет медленным.
После использования Google Chrome с DevTools/Profiles я вижу, что при выполнении медленного кода добавляется функция toString. Но у меня нет шансов получить, какой toString это и почему это необходимо в этом случае.
Не могли бы вы рассказать мне, в чем разница для браузера, так что это займет в 5 раз больше, чем другое?
Благодаря
Так что, если вы измените функциональность на что-то совершенно другое или получите совершенно другой элемент, это займет другое время. Кто бы мог подумать ? – adeneo
Нет, это так, кажется, нет ничего другого, поскольку l [0] и l [1] оба являются «а». –
'Не пытайтесь понять. Это немного затрудняет нам помощь ... :), но почему вы хотите, чтобы результат dom list в getElementsByTagName был на моей голове. – Keith