ActionScript 3.0 性能優(yōu)化小知識(shí)
2020-07-17 13:15:19
供稿:網(wǎng)友
1、改進(jìn)算法
無論對(duì)于那一種程序,好的算法總是非常重要的,而且能夠極大地提高程序性能,所以任何性能的優(yōu)化第一步就是從算法或者說程序邏輯的優(yōu)化開始,檢查自己的程序是否有多余的運(yùn)算,是否在沒有必要的時(shí)候做了無用功,往往從這些方面就能找到那些導(dǎo)致性能低下的地方。
2、優(yōu)化細(xì)節(jié)代碼
針對(duì)細(xì)節(jié)總是好的,有一些小技巧比如:
用 var obj:Object = {}; 要比 var obj:Object = new Object();要好;
var arr:Array = []; 要比 var arr:Array = new Array(); 要好;
for (var i:int=0, len=arr.length; i
如果不是為了保存顏色值請(qǐng)不要適用uint這個(gè)類型,他的速度比起 int要慢多了;
Array的遍歷要比Object或者Dictionary的枚舉要快得多。
if (myObj != null) 要比 if (myObj) 的速度要慢(更正, 之前把結(jié)果看反了,對(duì)不起大家~), for (var i:* in myObj) 比 for (var i:String in myObj) 要快;
Dictionary當(dāng) weak key設(shè)置為 true 的時(shí)候要比 false 慢;
var myText:String = “a” + “b” + “c”;
var myText2:String = [ "a", "b", "c" ].join(“”);
在JavaScript里面在IE下后者要更快,但是在AS里面,前者更快!
在循環(huán)體內(nèi)聲明變量和在循環(huán)體外聲明變量其實(shí)速度上不會(huì)有太大的區(qū)別。
3、權(quán)衡程序的結(jié)構(gòu)
程序的架構(gòu)也非常重要,良好的結(jié)構(gòu)會(huì)帶來性能和程序健壯性的提升,但是有的時(shí)候又是相互矛盾的,例如代碼寫得過于健壯,反而會(huì)影響性能,這個(gè)地方需要開發(fā)者自己去權(quán)衡。
4、小心Flash的重繪
如果你使用的是Flash Player 的Debugger版本,那么請(qǐng)?jiān)跈z查性能瓶頸的時(shí)候不要忘記打開顯示重繪區(qū)域的功能,這將幫你迅速定位到舞臺(tái)上有那些地方被重繪了,找出沒有顯示任何東 西卻不斷重繪的地方,這些地方肯定是有問題的。Flash Player很笨,不會(huì)說你把一個(gè)DisplayObject的visible設(shè)置成false就放棄重繪那個(gè)顯示對(duì)象。所以請(qǐng)保證你的 MovieClip在visible=false的時(shí)候?yàn)橥V範(fàn)顟B(tài)。有一點(diǎn)很有意思,假設(shè)兩個(gè)現(xiàn)實(shí)物體存在 hitTest = true 這樣的關(guān)系,那么重繪的區(qū)域的面積很有可能 > 兩者的面積總和!
5、以空間換時(shí)間
聽起來挺虛,實(shí)則很簡單,說白了就是以內(nèi)存換CPU,例如將不變動(dòng)的值進(jìn)行保存,免去下次需要此數(shù)據(jù)的時(shí)候進(jìn)行再次計(jì)算,雖然原理很簡單,但是有的時(shí)候卻很容易疏忽掉,而這個(gè)往往就造成你的算法效率低下的問題。
6、記得銷毀你的對(duì)象
對(duì)于非常駐的對(duì)象使用完之后記得消除其引用,防止出現(xiàn)內(nèi)存溢出的問題,往往要做到這一點(diǎn)需要有一個(gè)良好的編程習(xí)慣。
7、清除冗余的代碼
有些代碼可能你的程序一輩子也不會(huì)執(zhí)行到,請(qǐng)把這些沒有用的代碼或者對(duì)象清理掉,否則內(nèi)存會(huì)被偷偷的蠶食掉。
8、小心使用useBitmapCache = true
一般情況下除非你確定這個(gè)顯示對(duì)象不可能發(fā)生變化那么用用也無妨,不過我更推薦自己手動(dòng)的用BitmapData將該對(duì)象Draw一遍,然后讓這個(gè)對(duì)象徹底消失。否則每次的變動(dòng)都是巨大的性能消耗。