以下是luar工作经验的总结
////////////////////////////////////////////
ActionScript是一個自由度頗高的程式語言,雖然速度無法跟編譯語言相比,但在一般應用程式中是足夠應用,只是有幾點要注意:
大量組件同時初始化會影響執行效率;
接收和大量資料時,例如XML Parsing、資料排序等;
同時控制大量Movie Clip運動,例如粒子來運動模擬,會嚴重影響執行效率。在應用程式中反而少見這樣的需要;
當同一段程式執行超過15秒後,Flash Player會發出警告;
當一個循環程式,例如while重覆執行超過255次,Flash Player不會再執行
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
首先比較以下兩種程式碼寫法:
第一種寫法:
for (var i = 0; i<5; i++) {
this["mc"+i]._visible = true;
this["mc"+i]._x = 10;
this["mc"+i]._y = 10;
this["mc"+i]._alpha = 10;
}
第二種寫法:
for (var i = 0; i<5; i++) {
var mc = this["mc"+i];
mc._visible = true;
mc._x = 10;
mc._y = 10;
mc._alpha = 10;
}
兩種程式碼執行結果都是相同,但第二種寫法比第一種寫法執行效率更高,因為:
第一種寫法每行命令都要利用陣列存取運算子(Array Access Operator)找出究竟代表哪一個Movie Clip,浪費時間。
第二種寫法先將代表的Movie Clip記錄在變數,減少每行命令要重覆找一次。
多利用區域變數能有較好執行效率,第二種寫法也利用了這一點。
在大部分傳統程式設計語言的編譯器(Compiler)中,它能夠找出第一種寫法,自動轉為第二種寫法才編譯,藉以提高程式執行效率,這技術稱為「共用子表達式刪除」(Common Sub-Expression Elimination)。可惜,在Flash編譯器是沒有這技術,所以Flash開發者需要自己多留意良好編程習慣,多用第二種寫法。
///////////////////////////////////////////////////////////////////
當利用loadMovie(),載入JPG檔案時,Flash只支持Non-progressive JPG檔案。
當利用loadSound(),載入MP3檔案時,Flash只支持單一Bit Rate檔案,不支援Variable Bit Rate。
/////////////////////////////////////////////////////////////////////////////////////////
Flash動畫播放速度、順暢度完全取決於畫面是否豐富,圖像是否生動,色彩是否斑斕,這方面優化,是美工實戰經驗和責任感的測試。
不過,說到ActionScript執行速度,完全是程式員和Flash Player 7責任。Flash Player 7執行速度大大改善,主要是加強了Register數量。Register可以說了一個變數暫存地方,將常用變數放在此,就可以提升了執行速度。
區域變數是會常利用Register,所以盡弄可以利用區域變數;
過長變數名稱浪費記憶體和影響執行速度;
避免長的程式碼;
將複雜if...else...if整合,將較常出現的條件(Condition)放在較前if;
while比for執行得快;
遞減for(var i=10;i>=0;i--)比遞增for(var i=0;i<10;i++)執行較快;
while比for執行得快;
for...in比while/for執行得快;
多重定義(a=b=c=0)比單一逐個定義快;
////////////////////////////////////////////
ActionScript是一個自由度頗高的程式語言,雖然速度無法跟編譯語言相比,但在一般應用程式中是足夠應用,只是有幾點要注意:
大量組件同時初始化會影響執行效率;
接收和大量資料時,例如XML Parsing、資料排序等;
同時控制大量Movie Clip運動,例如粒子來運動模擬,會嚴重影響執行效率。在應用程式中反而少見這樣的需要;
當同一段程式執行超過15秒後,Flash Player會發出警告;
當一個循環程式,例如while重覆執行超過255次,Flash Player不會再執行
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
首先比較以下兩種程式碼寫法:
第一種寫法:
for (var i = 0; i<5; i++) {
this["mc"+i]._visible = true;
this["mc"+i]._x = 10;
this["mc"+i]._y = 10;
this["mc"+i]._alpha = 10;
}
第二種寫法:
for (var i = 0; i<5; i++) {
var mc = this["mc"+i];
mc._visible = true;
mc._x = 10;
mc._y = 10;
mc._alpha = 10;
}
兩種程式碼執行結果都是相同,但第二種寫法比第一種寫法執行效率更高,因為:
第一種寫法每行命令都要利用陣列存取運算子(Array Access Operator)找出究竟代表哪一個Movie Clip,浪費時間。
第二種寫法先將代表的Movie Clip記錄在變數,減少每行命令要重覆找一次。
多利用區域變數能有較好執行效率,第二種寫法也利用了這一點。
在大部分傳統程式設計語言的編譯器(Compiler)中,它能夠找出第一種寫法,自動轉為第二種寫法才編譯,藉以提高程式執行效率,這技術稱為「共用子表達式刪除」(Common Sub-Expression Elimination)。可惜,在Flash編譯器是沒有這技術,所以Flash開發者需要自己多留意良好編程習慣,多用第二種寫法。
///////////////////////////////////////////////////////////////////
當利用loadMovie(),載入JPG檔案時,Flash只支持Non-progressive JPG檔案。
當利用loadSound(),載入MP3檔案時,Flash只支持單一Bit Rate檔案,不支援Variable Bit Rate。
/////////////////////////////////////////////////////////////////////////////////////////
Flash動畫播放速度、順暢度完全取決於畫面是否豐富,圖像是否生動,色彩是否斑斕,這方面優化,是美工實戰經驗和責任感的測試。
不過,說到ActionScript執行速度,完全是程式員和Flash Player 7責任。Flash Player 7執行速度大大改善,主要是加強了Register數量。Register可以說了一個變數暫存地方,將常用變數放在此,就可以提升了執行速度。
區域變數是會常利用Register,所以盡弄可以利用區域變數;
過長變數名稱浪費記憶體和影響執行速度;
避免長的程式碼;
將複雜if...else...if整合,將較常出現的條件(Condition)放在較前if;
while比for執行得快;
遞減for(var i=10;i>=0;i--)比遞增for(var i=0;i<10;i++)執行較快;
while比for執行得快;
for...in比while/for執行得快;
多重定義(a=b=c=0)比單一逐個定義快;
回复Comments
作者:
{commentrecontent}