2009-10-23 78 views
0

我們目前正在構建一個使用PureMVC框架的Flex應用程序,該框架包含一個可以動態加載/卸載模塊的shell.swf。我們遇到了內存方面的問題,我們正在考慮用基於JavaScript的加載器替換shell.swf。Flex應用程序的最佳HTML/JavaScript框架是什麼?

兩個問題:

  1. 什麼將是一個很好的框架,動態加載Flex組件和允許模塊相互之間的溝通?

  2. 通過JavaScript動態地加載/卸載模塊來處理與Flex/Flash應用程序相關的典型內存問題?

回答

3

如果你需要在一個頁面上單獨的Flash元素來相互通信,你最終可能會使用LocalConnection。這就是說,您需要考慮使用Flex框架的運行時共享庫​​(RSL) - 否則每個SWF都必須包含它自己的Flex框架副本。即使如此,內存相關的問題並不是真的源於框架,而是來自與對象引用和可能CPU佔用有關的問題。

Flash的垃圾收集器只有在有時間的時候纔會運行,所以如果你的應用程序不斷地增加CPU,GC可能永遠不會運行。如果您使用Flex以調試模式運行應用程序,則可以強制GC運行以查看是否屬於這種情況。

Flash的GC基於標記和掃描概念。存在但沒有任何引用的對象首先被標記,然後再掃描GC。這意味着,如果你留下引用「死」的對象,他們永遠不會被釋放。一個常見的罪魁禍首是事件和事件聽衆。使用addEventListener始終使用弱鍵(避免使用GC計算的引用)通常是最佳做法。

// don't do this 
foo.addEventListener(Event.CHANGE, onChange); 

// do this 
foo.addEventListener(Event.CHANGE, onChange, false, 0, true); 

格蘭特斯金納有一個excellent series on resource management in AS3你應該檢查出來。

相關問題