http://jsperf.com/for-vs-foreach/9 를 보고 forEach가 정말 그렇게 느려?
라고 생각이 들어서 node 커맨드라인을 열고 아래와 같이 처 넣고 실행.
어짜피 IE에서도 안되는거 Array를 prototype 확장하여 forEach 를 만들어서 쓰곤 했다.
Array.prototype.forEach=function(callback) {
for (var i=0,len=this.length; i<len; i++) {
callback(this[i], i);
}
}
그래서 이것도 넣어서 같이 돌려봤다.
--------------------------
var i, values = [], sum = 0;
for (i = 0; i < 10000; i++) {
values[i] = i;
}
function add(val) {
sum += val;
}
var itercount =2000;
sum=0;
time = +new Date();
for (var _i=itercount; _i>=0; _i--) {
values.forEach(add);
}
console.log("forEach legacy:"+ (+new Date()-time));
sum=0;
time = +new Date();
for (var _i=itercount; _i>=0; _i--) {
for (i = 0; i < values.length; i++) {
add(values[i]);
}
}
console.log("simple for:"+ (+new Date()-time));
Array.prototype.forEach2=function(callback) {
for (var i=0,len=this.length; i<len; i++) {
callback(this[i], i);
}
}
sum=0;
time = +new Date();
for (var _i=itercount; _i>=0; _i--) {
values.forEach2(add);
}
console.log("forEach custom:"+ (+new Date()-time));
---------------
결과는 아래와 같다.
forEach legacy:1041
simple for:295
forEach custom:215
오오 무려 prototype으로 만든 forEach 가 더 빠르다!
forEach, map, reduce, every, filter, join, 다 만들어야하나 싶네.
댓글
댓글 쓰기