devmae
개발자 향기
devmae
전체 방문자
오늘
어제
  • 전부 감상 (280)
    • Unity (52)
      • memo (37)
      • R&D (15)
    • 모바일 (32)
      • iOS (6)
      • Android (25)
    • 개발자 모드 (41)
      • 개발자처럼 파고들기 (28)
      • 한가해서 책읽는거 아님 (10)
      • 영상 요약 (3)
    • Languages (40)
      • C++ (23)
      • MFC (8)
      • Java (4)
      • javascript (5)
    • Flash (108)
      • tip (29)
      • tech (4)
      • as2.0 (1)
      • as3isolib (3)
      • flartoolkit (2)
      • 이미지 편집기 (2)
      • papervision3d (12)
      • scale form (2)
      • Flash Builder (12)
      • air (5)
      • as3.0 (20)
      • flash player (9)
      • 개념잡기 (6)
      • source (1)
    • +,-,×,÷ (3)
      • 수학 뽀개기 (3)

블로그 메뉴

  • 홈
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
devmae

개발자 향기

Flash/tech

ActionScript Performance Optimization 1

2009. 7. 31. 13:26
<출처 : http://asduck.kr/ >

performance & optimization 관련하여 조사한 자료들을 정리해 보았다.

기존에 알던 것들도 있고, 새롭게 알게 된 것들도 있다.
하나하나가 크게 영향을 미치진 않겠지만 이러한 코딩 습관들이 모이다 보면 결과적으론 performance 에 좋은 영향을 미치리라 생각한다.

1. Declaration of variable type ( 변수의 타입 선언 )
var num:Number;
var str:String;

2. Avoid implicit types conversion of numeric types( 강제 형변환 회피 )
var num:int = 10;
Math.sqrt( num );

//** Math.sqrt( num:Number ) 이므로 위와 같이 타입이 다른 변수의 대입은 피하는것이 좋다.

3. If you are going to access a property, variable, or a function value more than a few times, store that value in a local var ( 중복해서 쓰이는 값, 함수.. 등은 변수로 저장해서 사용하는 것이 좋다 )
var fname:String = person.firstName;  
if (fname == “Matt” || fname == “Ted” || fname == “Alex”) 
{
......
}

[ NOT ]
var person:Person;  
if (person.firstName == “Matt” || person.firstName == “Ted” || person.firstName == “Alex”)
{
......
}

4. Avoid variable declaration inside loops ( 반복문 안에서의 변수 선언은 피해라 )
var i:int;
var num:Number;
for( i=0; i<100; i++ )
{
num = Math.random();
}

[ NOT ]
var i:int;
for( i=0; i<100; i++ )
{
var num:Nmber = Math.random();
}

5. Cast instances, while reading from Array ( 배열값에 접근시, 배열 요소의 type 으로 변환해서 접근해라 )
var arrPoint:Array =[ new Point( 10, 10 ), new Point( 5, 9 )];
var i:int;
var max:int = arrPoint.length;
var point:Point;
var xPos:int;
for( i=0; i<max; i++ )
{
point = arrPoint[i] as Point;
xPos = point.x;
}

[ NOT ]
var arrPoint:Array =[ new Point( 10, 10 ), new Point( 5, 9 )];
var i:int;
var max:int = arrPoint.length;
for( i=0; i<max; i++ )
{
var xPos:int = arrPoint[i].x;
}

6. Bit operation are faster than normal operators ( bit 연산을 사용해라 )
var val1:int = 4 << 1; 
var val2:int = 4 << 2; 
var val3:int = 4 >> 1; 
var val4:int = 4 >> 2;

[ NOT ]
var val1:int = 4 * 2; 
var val2:int = 4 * 4; 
var val3:int = 4 / 2; 
var val4:int = 4 / 4;

//** 참고로 나누기 연산 대신 곱하기 연산을 사용하는 것이 좋다.
Multiply vs. Divide: instead of 5000/1000 use: 5000*0.001

7. Don’t use constants ( 상수를 사용하지 말아라 - adobe 개발자의 팁 )
const SPEED:int = 5;

//**  adobe 개발자의 팁이라고 하는데 이부분에 있어선 장단점이 있다.
//**  상수 대신 실제 값을 사용한다면 퍼포먼스의 개선은 될수 있으나. 코드 관리면에선
       깔끔함이 사라지는 것을 감안해야 한다.
//** 나의 경우는 보통 유지 보수나 수정의 용이성을 위해 오히려 const 의 사용을 즐기는
      편이긴 하지만, 가급적 필요한 변수에 제한시킨다.^-^

8. Avoid the new operator when creating Arrays ( 배열 생성시 new 연산자를 피해라 )
var arr:Array = [];

[ NOT ]
var arr:Array = new Array();

9. Use static for properties methods that do not require an object instance
StringUtils.trim( "text with space at end " );

Class definition:
package
{
    public final class StringUtils
        {
         public static function trim( s : String ) : String
         {
              var trimmed : String;
              // implementation...
              return trimmed;
          }
     }
}

//** 아마도 instance 의 method 보다 static method 사용이 낫다 라는 말인듯하다.
//** 위와 같은 경우는 보통 프로젝트에서 공통으로 사용되는 method 나 변수.. 들을
      유틸 클래스 하나에 공통으로 모아서 static 으로 사용하는 방식인거 같다.
      나 역시 프로젝트 별로 Utils Class 생성하여 이렇게 사용하고 있는데 퍼포먼스
      높인다기 보단, 사용의 편리성 때문인게 더 크다 ^-^

10. Use final when no subclasses need to be created of a class
( 더이상 변하지 않는 클래스는 final 로 선언 )
public final class StringUtils

11. Rank your if statements in order of comparisons most likely to be true
( if 구문에서 가장 빈번하게 발생하는 조건문순으로 체크해라 )
if ( conditionThatHappensAlot )
{
    // logic to handle frequently met condition
}
else if ( conditionThatHappensSomtimes ) 
{
    // handle the case that happens occaisonally
}
else 
{
    // handle the case that doesn&#8217;t happen that often
}

12. Use uint sparingly, it can be slow (VM has been changing, from 9 to 10, so int, uint and number conversions aren't as slow as they used to be.)
( uint 사용을 줄여라 )
var footerHex : uint = 0x00ccff;

13. Use RegEx for validation, use string methods for searching
( 유효성 체크를 위해선 정규표현식을, 검색을 위해선 string 을 사용해라 )
//** postal code validation example using regular expressions

private var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;
private function validatePostal( event : Event ) : void
{
    if( regEx.test( zipTextInput.text ) )
    {
         // handle invalid input case
     }
}

//** search a string using String methods

var string : String = "Search me";
var searchIndex : int = string.indexOf( "me" );
var search : String = string.substring( searchIndex, searchIndex + 2 );

14. Code against ENTER_FRAME events instead of Timer events( Timer 대신 Enterframe 을 사용해라 )
public function onEnterFrame( event : Event ) : void
{
}
private function init() : void
{
    addEventListener( Event.ENTER_FRAME, onEnterFrame );
}

[ NOT ]
public function onTimerTick( event : Event ) : void
{
}
private function init() : void
{
    var timer : Timer = new Timer();
    timer.start();
    timer.addEventListener( TimerEvent.TIMER, onTimerTick );
}


15. Alpha = 0 is not the same as visible = false (Objects marked invisible are passed over)
loginButton.visible = false;

[ NOT ]
loginButton.alpha = 0;

※  No difference in memory usage between an if statement and a switch statement ( if 와 switch는 메모리 사용성에 있어서 차이가 없다 )
퍼포먼스 면에서 보면 if 가 계산속도가 빠르나, 비교값이 int 인 경우 switch 의 속도가 더 빠르다.

※ One line assignments DO NOT buy any performance
( 한줄에 여러 연산을 써도 퍼포먼스에 영향이 없다 )
var i=0; j=10; k=200;

※ Length of method/variable names doesn't matter in ActionScript 3.0
( 메소드명, 변수명의 길이가 문제가 되지 않는다 )
someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();



스크롤의 압박이 ^-^ ;;
위의 내용들은 테스트 환경 및 방법에 따라 맞는 것도 있고, 아닐 수도 있다.
하지만 일반적인 환경에서는 위와 같은 코딩습관을 갖는것이 오히려 많은 도움이 될거라고 생각한다.



[ 참고자료 ]
http://gamedevjuice.wordpress.com/2008/02/15/seven-tips-about-performance-optimization-in-actionscript-3/

http://overfloweb.com/zbxe/study/465

http://www.insideria.com/2009/04/51-actionscript-30-and-flex-op.html


<출처 : http://asduck.kr/ >
    'Flash/tech' 카테고리의 다른 글
    • html에 파라미터 넘기고 플래시에서 받기
    • ByteArray를 이용해 BitmapData 속도 높이기
    • 폰트 라이브러리
    devmae
    devmae
    enjoy with me?

    티스토리툴바