2011-03-04 4 views
13

플렉스 개발자는 플렉스 어플리케이션의 성능을 향상시키기 위해 기억해야 할 주요 요점은 무엇입니까? 내 마음에 와서 것들은 다음과 같습니다 적절한 ArrayCollections 대신 ArrayLists를 사용하여 애니메이션 플렉스 성능 고려 사항

  • true로 설정 즉, UIComponent
  • 가 suspendBackgroundProcessing를 사용하여 : 경량 기본 클래스에서

    1. 확장 ItemRenderers. 스파크 DataGroups에서
    2. useVirtualLayout를 다른 프레임으로 AIR 응용 프로그램 (거래 등)
    3. 아마 분할 긴 데이터 처리를위한
    4. SQLight의 성능 최적화 (불행히도이 단계는 효과적이 충고를 만들기 위해 스크롤러 필요)? (결코 그렇게하지 않으므로 내가 잘못 생각할 수도 있습니다.)

    성능을 향상시키기 위해 Flex3/Flex4/AIR 응용 프로그램을 개발할 때 따라야 할 핵심 지침은 무엇입니까?

  • 답변

    6

    가벼운 무게의 스파크 그룹에서는 덜 중요하지만, 항상 중첩 된 컨테이너의 수를 최소로 유지하고 가능한 경우 명시적인 위치/크기를 설정하려고합니다. 동적으로 크기가 다른 컨테이너가 서로 중첩 된 복잡한 UI는 (일반적으로 불필요한) 많은 측정이 발생해야합니다. 이는 종종보기를 전환 할 때 커다란 시차를 야기합니다.

    +0

    소리가 잘 들린다. ItemRenderer를 사용하여 을 수동 방식으로 전환 할 예정입니다. – marko

    6

    내 목록 :

    • 사용 지역 바르 대신 글로벌 가능한만큼
    • 가능한만큼 대신 MXML의 액션
    • [바인딩] 코드의 톤을 생성하고, 그것을
    • 을 피하려고

    추신 Автор, а ты русский язык знаешь? :)

    +1

    ага ......... :) –

    +1

    ты откуда будешь? – Tuco

    +0

    Лол, ребята! :) –

    7

    많은 사람들이 itemRenderers가있는 성능 문제가있는 것 같습니다. 그래서, 여기 itemRenderer 바인딩을 절대 사용하지 않기위한 나의 기여 하나입니다. 바인딩 대신 dataChange 이벤트를 사용하기 위해 itemRenderers를 다시 작성하여 많은 고객 "메모리 누수"버그를 수정했습니다.

    그 외에도 가능한 한 중첩 된 컨테이너를 피하는 것에 대한 두 번째 @Wade Mueller의 의견이 있습니다. 중요한 순서대로

    +0

    바인딩 대신 dataChange 이벤트를 사용하도록 itemRenderer를 다시 작성한다고 할 때 어떤 의미입니까? itemRenderers 구성 요소 내에 값을 개별적으로 할당하는 대신 집합 데이터 메서드를 재정의하고 값을 할당하는 것을 의미합니까? –

    +0

    @Jason Towne itemRenderer에서 데이터 변경 이벤트 (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/events/FlexEvent.html#DATA_CHANGE)에 이벤트 리스너를 추가하고 이벤트 핸들러의 값. 그것은 set 데이터 메소드를 오버라이드하는 것과 약간 다릅니다; 그러나 vales를 할당하는 개념은 같은 방법입니다. 집합 데이터 메서드를 재정의하는 대신 dataChange 이벤트를 수신하는 것이 좋습니다. 그러나 나는 한 접근법을 다른 접근법보다 우선적으로 선택하는 좋은 이유가 없다. – JeffryHouser

    +0

    설명 주셔서 감사합니다. 그건 의미가 있습니다. –

    1

    나는 고려의 주요 것들 :

      • 바인딩은 별도의 코드를 많이 작성하고, 바인딩이 제거되지 않을 때 성능이 심각하게 저하 될 수 있습니다 . 예를 들어 응용 프로그램에서 구성 요소를 재사용하는 경우 수신 함수는 응용 프로그램의 전체 흐름에서 활성화되어 불필요한 메모리 및 CPU 사이클을 소모합니다. 큰 응용 프로그램의 경우 BindingUtils 클래스를 고려하십시오.당신 가되지 바인딩 해제 속성을 중괄호 {myVariable}

    1. 유효성 검사 (무효화) 호출과 결합 할 수

    2. 참고 플렉스에서 가장 비싼 전화의 일부입니다. 사용시주의하십시오.

      validateNow();

    3. 는 플렉스 component lifecycle을 이해합니다. 이러한 메서드를 재정의하면 인스턴스화 프로세스가 간소화 될 수 있습니다.

    4. 벡터 개체를 사용하십시오. More information.

    5. 영어> 숫자. Excellent SO answer.

    좀 더 기본적인 팁 :

    1. 루프 비싼 작업을 사용하지 마십시오. massiveArray의 경우
      for(var i:int = 0; i < massiveArray.length; i++) 
      

      매우 큰 어레이는 길이() 고가의 작업 일 수있다. 성능을 향상 시키려면 var massiveArrayLength:int = massiveArray.length;을 지정하십시오.

    2. http://jacksondunstan.com/에는 코드 최적화에 대한 풍부한 기사가 있습니다. 그 남자는 천재이다.

    3. 불필요한 변수 생성을 피하십시오. 가능한 경우 항상 변수를 다시 사용하십시오.

      function getComplexValue():int { 
          var i:int = complexCalculation(); // returns int after calculating 
          return i; 
      } 
      

      대신 즉시 반환하십시오.

    4. 플래시 프로필 퍼스펙티브는 친구입니다. 코드베이스 최적화에 소요되는 시간을 줄일 수있는 강력한 프로파일 러입니다.