DeviceCentral

나타나는 항목:

모바일 장치에서 Flash Lite 컨텐트의 ActionScript 최적화

대부분의 모바일 장치에서 처리 속도와 메모리가 제한되어 있으므로 모바일 장치에서 사용되는 Flash Lite 컨텐트의 ActionScript를 개발하는 경우 아래의 지침을 따르십시오.

  • 파일과 코드를 가능한 한 간단하게 유지합니다. 사용하지 않는 동영상 클립을 제거하고 불필요한 프레임 및 코드 루프를 삭제하며 너무 많은 프레임이나 관계없는 프레임을 사용하지 않습니다.

  • FOR 루프를 사용하면 조건이 반복마다 확인되면서 발생하는 오버헤드 때문에 더 많은 컴퓨터 운영력을 필요로 할 수 있습니다. 반복으로 인한 손실과 루프 오버헤드가 비슷하면 루프를 사용하는 대신 여러 작업을 개별적으로 실행하십시오. 코드가 더 길어질 수 있지만 성능이 향상됩니다.

  • 프레임 기반 루핑이 더 이상 필요하지 않으면 즉시 루핑을 중지합니다.

  • CPU를 많이 사용할 수 있는 문자열 및 배열을 가능한 한 처리하지 않습니다.

  • 다른 메서드 호출보다 오버헤드가 큰 ActionScript getter 및 setter 메서드를 사용하는 대신 항상 속성에 직접 액세스합니다.

  • 이벤트를 현명하게 관리합니다. 이벤트 수신기를 호출하기 전에 이벤트 수신기가 있는지(null이 아닌지) 여부를 확인하는 조건을 사용하여 이벤트 수신기 배열을 간결하게 유지합니다. clearInterval을 호출하여 활성 간격을 지우고 removeListener를 호출하여 활성 수신기를 제거한 다음 unloadapplication 또는 removeapplicationClip을 사용하여 컨텐트를 제거하십시오. 동영상 클립이 언로드될 때 SWF 데이터를 참조하고 있는 ActionScript 함수가 있으면 Flash에서는 간격 및 수신기 등에서 SWF 데이터 메모리를 다시 수집하지 않습니다.

  • 변수가 더 이상 필요하지 않으면 변수를 삭제하거나, 변수를 null로 설정하여 가비지 수집 대상으로 표시합니다. 변수를 삭제하면 SWF 파일에서 불필요한 에셋이 제거되므로 런타임 중에 메모리 사용을 최적화할 수 있습니다. 그러므로 변수를 null로 설정하는 것보다 삭제하는 것이 더 좋습니다.

  • 가비지 수집 전에 removeListener를 호출하여 개체에서 수신기를 명시적으로 제거합니다.

  • 함수가 동적으로 호출되고 고정된 매개 변수 집합을 전달하는 경우에는 callapply 대신 사용합니다.

  • 네임스페이스(경로 등)를 더 간결하게 만들어서 시작 시간을 줄입니다. 경로의 모든 수준이 IF 문으로 컴파일되고 새로운 Object 호출을 발생시키므로 경로의 수준이 적으면 시간이 절약됩니다. 예를 들어, 경로의 수준이 com.xxx.yyy.aaa.bbb.ccc.funtionName인 경우 com.xxx.yyy.aaa.bbb.ccc에 대해 개체가 인스턴스화되도록 합니다. 일부 Flash 개발자는 SWF 코드를 컴파일하기 전에 전처리기 소프트웨어를 사용하여 58923409876.functionName과 같은 고유 식별자로 경로를 줄입니다.

  • 파일이 동일한 ActionScript 클래스를 사용하는 여러 SWF 파일로 구성되어 있으면 컴파일 중에 선택된 SWF 파일에서 해당 클래스를 제외합니다. 이렇게 하면 파일 다운로드 시간과 런타임 메모리 요구 사항을 줄일 수 있습니다.

  • Object.watchObject.unwatch를 사용하지 않아야 합니다. 개체 속성을 변경할 때마다 플레이어에서 변경 알림을 보내야 하는지를 확인해야 하기 때문입니다.

  • 타임라인의 키프레임에서 실행되는 ActionScript 코드가 완료되는 데 1초가 넘게 걸리면 코드를 분할하여 여러 키프레임에서 실행하는 것을 고려합니다.

  • SWF 파일을 게시할 때 코드에서 trace 문을 제거합니다. 이렇게 하려면 [설정 게시] 대화 상자의 [Flash] 탭에서 [추적 작업 생략] 확인란을 선택하십시오.

  • 상속을 사용하면 메서드 호출 횟수가 늘어나고 메모리를 더 사용합니다. 필요한 모든 기능이 포함된 클래스가 슈퍼클래스에서 일부 기능을 상속하는 클래스보다 런타임에 효율적입니다. 따라서 클래스 확장성과 코드 효율성 사이에서 설계 균형점을 찾아야 할 수 있습니다.

  • 한 SWF 파일에서 사용자 정의 ActionScript 클래스(예: foo.bar.CustomClass)가 포함된 다른 SWF 파일을 로드한 다음 언로드하는 경우 클래스 정의가 메모리에 남아 있습니다. 메모리를 절약하려면 언로드된 SWF 파일에서 사용자 정의 클래스를 모두 명시적으로 삭제합니다. delete 문을 사용하고 정규화된 클래스 이름(예: delete foo.bar.CustomClass)을 지정하십시오.

  • 전역 변수를 정의한 동영상 클립이 제거되는 경우 전역 변수가 가비지 수집 대상으로 표시되지 않으므로 전역 변수를 제한적으로 사용합니다.

  • Flash의 [구성 요소] 패널에서 사용할 수 있는 표준 사용자 인터페이스 구성 요소를 사용하지 않습니다. 이러한 구성 요소는 데스크톱 컴퓨터에서 실행되도록 설계되었으며 모바일 장치에서 실행되도록 최적화되지 않았습니다.

  • 많이 중첩된 함수를 가능한 한 사용하지 않습니다.

  • 존재하지 않는 변수, 개체 또는 함수를 참조하지 않습니다. 데스크톱 버전의 Flash Player와 비교할 때 Flash Lite 2에서는 존재하지 않는 변수 참조에 대한 검색 속도가 느리므로 성능에 심각한 영향을 줄 수 있습니다.

  • 익명 구문을 사용하여 함수를 정의하지 않습니다(예: myObj.eventName = function{ ...}). function myFunc { ...}; my Obj.eventName = myFunc;와 같이 명시적으로 정의된 함수가 더 효율적입니다.

  • Math 함수와 부동 소수점 수의 사용을 최소화합니다. 이러한 값을 계산하면 성능이 저하됩니다. Math 루틴을 사용해야 하면 값을 미리 계산하여 변수 배열에 저장하는 것을 고려하십시오. 데이터 테이블에서 값을 검색하는 것이 Flash에서 런타임에 값을 계산하게 하는 것보다 훨씬 빠릅니다.