提升as3程序性能的十大要點
新的一年到來了,是時候為flash的性能制定新的解決方案了。今天的文章收集了我認為可以提升flash程序性能的十大要點。繼續往下讀吧。
1.使用flash的源生代碼代替as3
一般情況下,使用flash player的原生代碼做一些大負荷的工作要比使用as3去做好的多。因為和調用flash player api(flash包里面的所有東西)里面的方法相比,在vm(虛擬機)里運行你自己的as3代碼勢必會帶來一些間接成本。不適用這個規則的例外是,api有時會做你不想做的事情,比如分配內存
2.減少內存分配以降低gc
除了你預料到的內存分配,比如通過使用某個新的操作觸發某個事件,還有很多隱藏的分配,比如關聯的字符串對象、flash player自己創建的對象,如事件。這些分配很慢,使用完了回收他們更慢,所以試著去掉這樣的分配。
3.減少對象的數目以降低gc
使用完的對象,flash player的垃圾回器會回收他們的內存來重新使用。不幸的是,這個過程是非常緩慢的而且我們不能控制它什么時候執行。所以,盡量重用已經存在的對象而減少使用new來聲明新的對象。對這方面有幫助的一個技術是free lists。
4.不要使用任何動態的東西
這包括動態的函數(如無特征的函數和被聲明為局部變量的函數),如Object和MovieClip這樣的對象,用”[]“操作符訪問字段、無類型的變量。這些都比使用相應的靜態量(如正規的函數、非動態類、”.”運算符、有類型的變量)要慢的多。
5.把更多的事情交給gpu
現在在flash里面(fp11)我們除了可以使用cpu外,還可以使用顯卡的gpu。二者的組合使用是完成高性能3D圖像處理(Stage3D)和高清視頻(StageVideo)播放的關鍵。
6.減少函數的調用
非常不幸的是,函數調用在as3里面是非常慢的。這包括總在使用的getter和setter方法(如調用數組的長度Array.length)。嘗試用緩存函數的執行結果來代替多次的函數調用,尤其是用getter的時候。在極個別情況下,手動地把一個小的函數體合并到一個更大的函數里面。
7.使用專用的函數或者類,而不是通用的
Sprite比MovieClip省內存,Shape比Sprite省內存,BitmapData的copyPixels方法比draw方法更快。
8.盡量少的使用靜態訪問
訪問靜態變量、常量和函數比訪問非靜態的要慢很多。盡量使用非靜態方案或者把靜態訪問緩存為非靜態變量、常量或者局部的變量、常量。
9.局部變量比字段(原文為文fields,譯者認為就是所謂的成員變量)更好
讀取類變量和對象變量(又叫字段,成員變量)比訪問局部變量要慢地多。如果你頻繁的使用某個字段訪問,那么***把它緩存為局部變量。
10.清除無意義的代碼
經常見到一些變量被初始化為該類型的默認值,這會減緩對象的創造時間和函數的執行時間。作為一個好的習慣,清除那些無用代碼,你的整個程序的性能將會提升。
原文:http://www.wefdc.com/?p=2395
【編輯推薦】