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