보통 배열을 쓸 때

배열을 다시 짜거나 초기화 시켜야할 때 다음과 같이 많이 쓰죠.

arr = [];

하지만 다음과 같이 사용하면 약 3배 정도 퍼포먼스를 향상시킬 수 있습니다.

arr.length = 0;

length가 read-only라고 생각하고 계셨을 수도 있지만 length 값은 read-write 입니다.

배열의 길이를 0으로 해버리면 모든 원소를 날리고 초기화가 됩니다.

[] 명령어 자체도 new 와 마찬가지이기 때문에

새로운 객체를 만드는 것보다는 길이를 줄이는게 빠른 요인인것 같습니다.

다음과 같이 몇가지 테스트를 더 해봤습니다.

import flash.utils.getTimer;

function test1(): int
{
     var arr: Array = [ 1, 2, 3, 4, 5 ];
    
     arr = [];
    
     return arr.length;
}

function test2(): int
{
     var arr: Array = [ 1, 2, 3, 4, 5 ];
    
     arr.length = 0;
    
     return arr.length;
}

function test3(): int
{
     var arr: Array = [ 1, 2, 3, 4, 5 ];
    
     arr = new Array();
    
     return arr.length;
}

function test4(): int
{
     var arr: Array = [ 1, 2, 3, 4, 5 ];
    
     while( arr.length )
          arr.pop();
         
     return arr.length;
}

function test5(): int
{
     var arr: Array = [ 1, 2, 3, 4, 5 ];
    
     while( arr.length )
          arr.shift();
         
     return arr.length;
}

function test( $function: Function ): void
{
     var i: int = 1000000;
     var time: int = getTimer();
     while( i-- )
          $function();
    
     trace( getTimer() - time );
}

test( test1 );
test( test2 );
test( test3 );
test( test4 );
test( test5 );

결과값

1023
815
1596
1476
1991

당연하겠지만 shift가 가장 느리고 length = 0 이 가장 빨랐습니다.

여기서 초기에 공통적으로 생성해주는 부분이 약 700 ms 소모되므로 초기화하는 과정만 시간을 따로 떼어내면

323
115
896
776
1291

이라는 수치로 바뀝니다.

즉 [] 로 초기화 시키는 것 보다 length = 0 으로 해주는 것이 약 1/3 시간 밖에 걸리지 않습니다.

유후~

메모리도 많이 줄어들것이라고 예상합니다.

유후~



For the better
저작자 표시 비영리 동일 조건 변경 허락
신고
  1. Favicon of http://asnike.com 니케 2010.05.12 15:37 신고

    아~ 이게 빠르다고 속도가 민감한 부분에 꼭 저렇게 사용하라고 그러시더군요!
    ㅋㅋ 실제 테스트 수치를 보니 더 와닿네요
    수고하셨어요!

  2. 파퓨표 2010.05.12 15:42 신고

    오홍 ㅎㅎ 그렇군요 ㅎㅎㅎㅎ
    좋은 정보 감사염~ ㅋㅋㅋㅋ
    유후~ ㅋㅋ

  3. Favicon of http://webnoon.net 웹눈 2010.05.12 16:52 신고

    앗.. 이거슨 플래시 서울 컨퍼런스때 나왔던 TIP 인거 같네요! ㅎㅎ

  4. 겨울나기 2010.05.12 16:56 신고

    For the better. 수고하셨습니다!

  5. Favicon of http://7zelkova.tistory.com 성주 2010.05.13 10:00 신고

    오호!! 좋은거 배워갑니다

  6. 쫑쫑쫑 2010.05.18 15:08 신고

    나이스횽 ㅋ ~ ㅋ

  7. 뱀뱀 2010.07.21 16:39 신고

    오호~ 한 수 배워 갑니다~

+ Recent posts