기본 콘텐츠로 건너뛰기

라벨이 forEach인 게시물 표시

javascript에서 forEach의 성능 문제

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++...

Array function - Iteration

이것만은 꼭 알고 이해하고 손에 익숙해두자. forEach : 배열의 갯수만큼 반복 map : return 값을 인자로 배열을 반환 reduce : return 값과 배열을 인자로 연산 some : return 이 하나라도 참이면 참을 반환 every : return 이 모두 참이면 참을 반환 sort : return 이 참인 기준의 순방향 정렬 filter : return 이 참인 것들의 배열을 반환 배열을 만들고 직접 돌려보고 느껴보자. reduce 로 sum, min, max를 한다던가 every 로 transaction처리를 한다던가 하는 걸 예로 들면 사고의 폭이 좁아질 수도 있으니 돌려보면서 현상을 관찰하는게 좋다. 기타 함수 concat : 배열들을 연결 indexOf : 인자의 위치를 반환 join : 인자로 배열들을 연결 slice : from<to 범위의 배열을 반환 splice : from에서 n개만큼 배열을 잘라내고 그 부분을 반환 push, pop : 배열의 뒷쪽에 넣고 빼기 unshift, shift : 배열의 앞쪽에서 넣고 빼기