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
























