Flash Actionscript 優(yōu)化指南
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-06 01:25:37 作者:佚名
我要評論
第一章 AS3的一些優(yōu)化計算方法
用乘法來代替除法(當除數(shù)可轉(zhuǎn)化為有限數(shù)的時候)。比如var n:Number = value * 0.5;要比var n:Number = value / 2;快。但差別并不是很大。只有在需要大量計算情況下,比如3D引擎中差別才比較明顯。
用位運算代替除2或乘2。比如10>
7) 短變量名和長變量名
變量名越短,效率越高??紤]到長變量名也有它的好處(比如,便于維護等),因此建議在關鍵部位(比如大量循環(huán)出現(xiàn)的時候)使用短變量名,最好就1-2個字符。
8) 循環(huán)前、后聲明變量
在測試前,我們認為循環(huán)前聲明變量會更加節(jié)約時間,不料測試結(jié)果并不明顯,甚至還恰恰相反!
// 內(nèi)部聲明
t = getTimer()
for (var i=0; i < MAX; i )
{
var test1 = i
}
t1.text = "Inside:" (getTimer() - t)
// 外部聲明
t = getTimer()
var test2
for (var i=0; i < MAX; i )
{
test2 = i
}
9) 使用嵌套的if結(jié)構
當用到復雜的條件表達式時。把他們打散成為嵌套的獨立判斷結(jié)構是最佳方案。下面的代碼我們進行了測試,發(fā)現(xiàn)這種效果改進明顯!
MAX = 20000
a = 1
b = 2
c = -3
d = 4
var i=MAX
while(--i > -1)
{
if (a == 1 && b == 2 && c == 3 && d == 4)
{
var k = d * c * b * a
}
}
//下面的判斷更加節(jié)省時間
var i=MAX
while(--i > -1)
{
if (a == 1)
{
if (b == 2)
{
if (c == 3)
{
if (d == 4)
{
var k = d * c * b * a
}
}
}
}
}
10) 尋找局部變量(this方法同with方法比較)
局部變量的定位方法很多。我們發(fā)現(xiàn)用with比用this更加有優(yōu)勢!
obj = {}
obj.a = 1
obj.b = 2
obj.c = 3
obj.d = 4
obj.e = 5
obj.f = 6
obj.g = 7
obj.h = 8
obj.test1 = useThis
obj.test2 = useWith
MAX = 10000
function useThis()
{
var i = MAX
while(--i > -1)
{
this.a = 1
this.b = 2
this.c = 3
this.d = 4
this.e = 5
this.f = 6
this.g = 7
this.h = 8
}
}
function useWith()
{
var i = MAX
while(--i > -1)
{
with(this)
{
a = 1
b = 2
c = 3
d = 4
e = 5
f = 6
g = 7
h = 8
}
}
}
11) 循環(huán)監(jiān)聽鍵盤事件
同剛才所提到的尋址一樣,我們實現(xiàn)給一個指向會得到更好的效率,比如:
keyDown = Key.isDown
keyLeft = Key.LEFT
//我們再用 if (keyDown(keyLeft))
附:我們測試了按鍵代碼和鍵值常量的效率發(fā)現(xiàn)并無太大差別。
12) Math.floor()方法與int()
這個問題曾在Flashkit的論壇被提出討論過。測試表明,舊的int方法反而效率更高。我們的測試結(jié)果也反映了這一點。
13)eval表達式與中括號語法
我們并沒有發(fā)現(xiàn)明顯的差別,并不像剛才所述那樣,舊的eval表達式比起中括號方法并沒有太大的優(yōu)勢
var mc = eval("_root.myMc" i)
var mc = _root["myMc" i]
//兩者效率差不多16) 涉及MC的循環(huán):ASBroadcaster 同歡同循環(huán)的差別
結(jié)論
我們從這些測試結(jié)果中發(fā)現(xiàn),對于不同的需求,采用不同的代碼,我們可以大大提高腳本的執(zhí)行效率。雖然我們在這里羅列了許多的優(yōu)化代碼的方法,需要大家自己測試、實驗的還有很多(考慮到每個人的需求不同).如果你想更加深入地討論這類問題??梢詠砦覀兊恼搲?。
aw附:
終于翻譯完了,自己也學到很多好東西,大家又什么問題可以去gotoAndPlay的官方,也可以來我的Blog提出!
第三章 黑羽AS心得:淺釋ActionScript的代碼優(yōu)化
本機函數(shù)要比用戶定義的函數(shù)運行速度更快。本機函數(shù)即Flash中內(nèi)有的一些函數(shù)(intrinsic),比如hitTest(),你沒必要自己寫一個類似的。
3.不要過多使用 Object 類型。
數(shù)據(jù)類型注釋應力求精確,這樣可以提高性能。只有在沒有適當?shù)膫溥x數(shù)據(jù)類型時,才使用 Object 類型。同時也便于代碼管理,時刻知道對象的類型和作用。同時也有利于編譯器編譯時優(yōu)化。
4.避免使用 eval() 函數(shù)或數(shù)據(jù)訪問運算符。
通常,較為可取且更有效的做法是只設置一次局部引用。不得已時才用eval,比如轉(zhuǎn)換_droptarget為MovieClip時。
5.在開始循環(huán)前將 Array.length 賦予變量,尤其是大的循環(huán)。
在開始循環(huán)前將 Array.length 賦予變量(比如var iLength:Number),將其作為條件使用,而不是使用myArr.length 本身。
原因,在循環(huán)中,iLength是Number變量,會被放入寄存器使用,效率遠比訪問Array再得到length高。例如,應使用
var fontArr:Array = TextField.getFontList();
var arrayLen:Number = fontArr.length;
for (var i:Number = 0; i < arrayLen; i ) {
trace(fontArr[i]);
}
來代替:
var fontArr:Array = TextField.getFontList();
for (var i:Number = 0; i < fontArr.length; i ) {
trace(fontArr[i]);
}
6.注重優(yōu)化循環(huán)及所有重復動作。
Flash Player 花費許多時間來處理循環(huán)(如使用 setInterval() 函數(shù)的循環(huán))。
7.在局部變量夠用時,不要使用全局變量。類靜態(tài)變量也要少用。
全局變量是開發(fā)者的惡夢。實在需要全局變量的話,我建議使用singleton設計模式來進行管理。
8.聲明變量時,添加 var 關鍵字。
這是為了編譯時讓編譯器知道你的變量類型,優(yōu)化編譯。
黑羽補充一點:對關鍵字的使用要謹慎。
不贊成使用關鍵字作為自己的method和屬性名,除非你確認后續(xù)開發(fā)不會用到相同的事件名和屬性名。
但你怎么知道flash使用了多少隱藏關鍵字?太多了!比如說 className, invalidate, refresh, mouseOver等等不常用的關鍵詞。好的方法是使用SEPY編輯器來寫代碼,那里面加亮了所有公布的和沒有公布的關鍵詞。而且因為很有可能和start,load,等這些常用的事件名重復,帶來代碼不必要的修改和麻煩。
9.對涉及到調(diào)用繪圖資源的函數(shù)時,盡量先多判斷再調(diào)用。
所有漸變,位置變化,創(chuàng)建刪除MC,組件等函數(shù)都涉及到繪圖資源的調(diào)用。在很多情況下,盡量先用邏輯判斷變量或者對象的屬性,必要時再調(diào)用這些函數(shù)。這樣可以節(jié)省較多的計算資源。
相關文章
flash cs6想要實現(xiàn)鼠標跟隨效果?該怎么制作呢?今天我們就來看看使用as2.0實現(xiàn)鼠標跟隨效果的教程,需要的朋友可以參考下2019-05-19
Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來輸入文本,該怎么使用代碼輸入文本呢?請看下文詳細的教程,需要的朋友2018-03-11
flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來看看簡單的例子,需要的朋友可以參考下http://www.fzitv.net/softs/408402.2018-02-28
flash cs6中怎么使用ActionScript3.0?
flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2018-01-25
本教程給大家分享一個Flash小教程,教大家在Flash CS6中怎么實現(xiàn)鼠標點擊決定圖像位置?方法很簡單,感興趣的朋友歡迎前來一起分享學習2018-01-12
本教程教腳本之家的ActionScript教程學習者在Flash中如何用代碼將圖片放在自己想要的舞臺位置,教程講解的詳細,感興趣的朋友歡迎前來分享學習2017-11-20
在Flash CS6中使用with函數(shù)繪制背景圖教程
本教程教腳本之家的ActionScript教程學習者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細,方法也不難,非常適合Flash新手入門學習2017-11-18
Flash怎么設置元件坐標?flash使用代碼設置元件的坐標的教程
Flash怎么設置元件坐標?flash中導如的元件需要添加坐標,該怎么定位元件坐標呢?下面我們就來看看flash使用代碼設置元件的坐標的教程,需要的朋友可以參考下2017-10-11
Flash怎么制作來回搖擺的花朵的動畫?Flash中想要給花朵制作一段搖擺的動畫效果,該怎么制作呢?下面我們就來看看詳細的教程,很簡單,需要的朋友可以參考下2017-05-23
Flash怎么制作流動七彩色的文字?想要讓文字動起來,該怎么使用flash給文字制作一個流動七彩色的動畫呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2017-04-23











