2011-03-04 97 views
13

爲了提高Flex應用程序的性能,Flex開發人員應該記住什麼是主要關鍵點? 這,我想起的是:Flex性能考慮

  1. 更輕質的基類擴展的itemRenderer:即UIComponent
  2. 使用suspendBackgroundProcessing設置爲true使用ArrayCollections的的ArrayList,而不是在適當的動畫
  3. useVirtualLayout在星火DataGroups(不幸的是這一步需要滾動條,使這條建議有效)
  4. 的AIR應用程序(交易等)
  5. 大概分割長的數據加工成不同的幀SQLight性能優化? (雖然從未這樣做過,所以我可能會誤會)

爲了提高性能而開發Flex3/Flex4/AIR應用程序時,您試圖遵循的主要準則是什麼?

回答

6

雖然這對重量較輕的Spark組來說並不重要,但我總是儘量保持嵌套容器的數量最小,並儘可能設置明確的位置/大小。具有動態大小的容器的複雜UI彼此嵌套會導致大量(通常不必要的)測量必須發生。在視圖之間切換時,這通常會導致巨大的滯後。

+0

聽起來不錯,我將使用ItemRenderer將我的 marko 2011-05-01 14:48:15

6

我的列表:

  • 使用本地變量,而不是全球儘可能
  • 的ActionScript而不是MXML儘可能
  • [綁定]生成大量代碼,儘量避免它

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

+1

а......... :) – 2011-03-04 23:34:47

+1

тыоткудабудешь? – Tuco 2011-03-04 23:36:10

+0

Лол,ребята! :) – 2011-03-05 11:02:17

7

在我看來,很多人都有性能問題w/itemRenderers。所以,我的一個貢獻是從不使用綁定itemRenderer。我通過重寫其itemRenderer來使用dataChange事件而不是綁定來修復大量客戶「內存泄漏」的bug。

除此之外,我第二@Wade Mueller關於儘可能避免嵌套容器的評論。

+0

當你說你重寫itemRenderer使用dataChange事件而不是綁定時,你是什麼意思?你的意思是重寫set數據方法並在那裏賦值,而不是分別在itemRenderers組件中分配值? – 2011-06-21 23:31:21

+0

@Jason湯在的itemRenderer,添加一個事件監聽到數據改變事件(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/events/FlexEvent.html#DATA_CHANGE)和分配事件處理程序中的值。這與重寫set數據方法略有不同;但是分配值的概念是相同的。我傾向於監聽dataChange事件,而不是重寫set數據方法;但我沒有很好的理由選擇另一種方法。 – JeffryHouser 2011-06-22 02:44:59

+0

感謝您的澄清。這就說得通了。 – 2011-06-22 02:58:16

1

我認爲主要的事情,按重要性排序:

  1. 綁定

    • 創造了很多額外的代碼,當綁定不刪除會導致性能嚴重退化。例如,如果您在應用程序中重複使用組件,則監聽功能在應用程序的整個流程中處於活動狀態,從而消耗不必要的內存和CPU週期。對於較大的應用,請考慮BindingUtils類。

    • 請注意,您不能解除綁定的屬性與花括號{myVariable}

  2. 驗證(無效)調用勢必有一些Flex中最昂貴的電話。使用它們時要小心。

    validateNow();

  3. 瞭解了Flex component lifecycle。覆蓋這些方法可以簡化實例化過程。

  4. 使用矢量對象。 More information

  5. Ints> Numbers。 Excellent SO answer

一些更基本的技巧:

  1. 不要循環使用昂貴的操作。

    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; 
    } 
    

    而是立即返回。

    function getComplexValue():int { 
        return complexCalculation(); 
    } 
    
  4. 如果您有權訪問它,Flash Profile透視圖就是您的朋友。它是一個強大的分析器,可以減少優化代碼庫所需的時間。