DeviceCentral

主題顯示位置:

針對行動裝置的 Flash Lite 內容最佳化 ActionScript

因為大多數行動裝置的處理速度和記憶體都受到限制,所以在開發用於行動裝置的 Flash Lite 內容 ActionScript 時,請遵守以下準則:

  • 檔案和其程式碼要儘可能保持簡單。 移除未使用的影片剪輯、刪除不必要的影格和程式碼迴圈,並且避免過多的影格或外部影格。

  • 使用 FOR 迴圈所耗費的資源可能很多,因為在每個反覆運算中檢查條件會造成使用資源增加。 如果反覆運算的成本和迴圈耗費的資源不相上下,請個別執行多次作業,而不要使用迴圈。 程式碼可能比較長,但效能會有所改進。

  • 一旦不再需要影格架構的迴圈,就加以停止。

  • 在可能的情況下避免字串和陣列處理,因為這些作業可能很耗費 CPU。

  • 永遠試著直接存取屬性,而不要使用 ActionScript 的 getter 和 setter 方法,這兩種方法比其他的方法呼叫還需要耗費更多資源。

  • 以明智的方式管理事件。 在呼叫偵聽程式之前,使用條件來檢查它是否存在 (非 null),能保持事件偵聽程式陣列的精簡。 呼叫 clearInterval 清除任何作用中的間隔,然後在使用 unloadapplicationremoveapplicationClip 移除內容之前,呼叫 removeListener 移除任何作用中的偵聽程式。 如果在取消載入影片剪輯時,有任何的 ActionScript 函數仍在參照 SWF 資料,則 Flash 不會回收 SWF 資料記憶體 (例如,從間隔和偵聽程式進行回收)。

  • 不再需要變數時,將其刪除或設定為 null,這樣會將變數標示為由記憶體回收。 刪除變數有助於在執行階段時最佳化記憶體的使用,因為不需要的資源會從 SWF 檔案中移除。 刪除變數的做法比起將它們設為 null 還要好。

  • 在記憶體回收之前,呼叫 removeListener 以明確地從物件移除偵聽程式。

  • 如果是以動態方式呼叫函數,且該函數會傳遞固定的參數集,請使用 call 而不要使用 apply

  • 將命名空間 (例如路徑) 設定得更為精簡以節省啟動時間。 套件中的每個層級都會編譯為 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」標籤上,選取「忽略 trace 動作」核取方塊。

  • 繼承會增加方法呼叫的次數,並使用較多的記憶體::在執行階段時,包含所有必要功能的類別,會比從父類別繼承某些功能的類別來得有效率。 因此在設計時,可能需要在類別的擴充性和程式碼的效率之間取得平衡。

  • 當一個 SWF 檔案載入另一個包含自訂 ActionScript 類別 (例如,foo.bar.CustomClass) 的 SWF 檔案,然後再取消載入該 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 在執行階段計算值快上許多。

如需針對行動電話和裝置建立內容的更多秘訣和技巧,請參閱 www.adobe.com/go/learn_cs_mobilewiki_en