Antonius, по сути можно использовать forEach там где не критична производительность, и forEach не всегда медлнее.
Сообщение от Antonius
|
Замерял в фаербаге console.time/timeEnd.
|
Нужно замерять не один раз, а много и выводить среднее значение по времени, и нагружать как можно больше, вот к примеру асинхронный тест который не вешает браузер и синхронный (браузер подвисает)
http://jsfiddle.net/2pZ3T/1/
<input id="start" type="button" value="start test" >
<script>
var divs = [];
function domGenerate() {
var container = document.createDocumentFragment();
for(var i = 0; i < 1000; i++) {
var div = document.createElement("div");
div.innerHTML = i;
divs.push(div);
container.appendChild(div);
}
document.body.appendChild(container);
}
domGenerate();
function domClearFor() {
for(var i = 0; i < divs.length; i++)
divs[i].parentNode.removeChild(divs[i]);
divs = [];
domGenerate();
}
function domClearForEach() {
divs.forEach(function (item) {
item.parentNode.removeChild(item);
});
divs = [];
domGenerate();
}
function test(fnc, count, callback) {
var time = 0, i = 0, d;
(function runTest() {
if(i++ == count) {
callback(time / count);
return;
}
d = new Date;
fnc();
time += new Date - d;
setTimeout(runTest, 0);
}());
}
function testSync(fnc, count, callback) {
var time = 0, d;
for(var i = 0; i < count; i++){
d = new Date;
fnc();
time += new Date - d;
}
callback && callback(time / count);
return time / count;
};
document.getElementById("start").onclick = function () {
console.log("test running...");
this.value = "test running...";
test(domClearFor, 1000, function (time) {// асинхронный test
console.log("for", time);
});
test(domClearForEach, 1000, function (time) {
console.log("forEach", time);
});
};
</script>