AS3 最佳技巧和实践
在网络上找到很多关于 AS3 实践优化的资料,自己整理下(自己还没有验证过,有时间再写测试代码):
- new Array () 和 new Object () 比直接用 [] 和 {} 慢 3 倍的效率:
var a = [];
代替
var b = {};var a =new Array();
var b = new Object; - 数组的索引用整数:
list[int(0)]比直接用list[0]快。
- Array 的创建是消耗是非常大的,所以不要这样做,尽可能重复利用,更新数组相对性能小很多:
var vanityCollection01 : Array = new Array(); var vanityCollection02 : Array = new Array(); var vanityCollection03 : Array = new Array(); var vanityCollection04 : Array = new Array();
- 更快的数组拷贝:
var copy : Array = sourceArray.concat();
- 用 {} 的匿名对象创建比 new 快:
var o : * = {firstName:"John",lastName:"Smith",age:45 }; NOT: var p : Person = new Person(); p.firstName = "John"; p.lastName = "Smith"; p.age = 45;
- 静态函数应用,不需要创建对象实例:
StringUtils.trim( "text with space at end " ); 类定义: package { public final class StringUtils { public static function trim( s : String ) : String { var trimmed : String; // implementation... return trimmed; } } }
- 在应用程序中,常量定义是无法修改的:
public const APPLICATION_PUBLISHER : String = "Kannopy, Inc.";
- 不想被继承的类,可以用 final 来修饰:
public final class StringUtils
- package 级别的函数和变量,不需要类和对象实例,直接调用(这些好像还没怎么用到):
createSnapShot( arg );
不需要:someObjectInstance.createSnapShot( arg );
SomeClass.createSnapShot( arg );
类定义:package { // imports…; public function createSnapShot(target:IBitmapDrawable) : Bitmap { // implementation… } }
- if 和 switch 的效率是一样的,:
if ( condition ) { // handle condition }
switch ( condition )
{
case "A":
// logic to handle case A
break;
case "B":
// logic to handle case B
break;
}
<li>AVM中用int比Number在执行循环速度要快:
(var i: int = 0; i < n; i++) NOT for (var i: Number = 0; i < n; i++)
var footerHex : uint = 0x00ccff;
for (;i<n2;i++) Vector3D(array[int(i*2)]).x = 2;不要用(因为会自动转为 Number 的):
for (;i<n2;i++) Vector3D(array[i*2]).x = 2;
var decimal : Number = 14.654;不要用(因为会自动转为 Number 的):
var decimal : int = 14.654;
for (..){a*180/Math.PI;} 声明: toRadians = a*180/Math.PI; 放置到循环外面
for (var i=0;i< myArray.lengh;i++){ }应该采用:
var len : int = myArray.lengh; for (var i=0;i<len;i++){}
removeEventListener( Event.COMPLETE, onComplete );
delete someObject;
// postal code validation example using regular expressions private var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i; private function validatePostal( event : Event ) : void { if( regEx.test( zipTextInput.text ) ) { // handle invalid input case } }
// search a string using String methods var string : String = "Search me"; var searchIndex : int = string.indexOf( "me" ); var search : String = string.substring( searchIndex, searchIndex + 2 );
<li>重用对象特别是(DisplayObjects, URLLoader),保持内存使用平稳,因为创建这些对象会使得cpu和内存占用加大,可能导致画面不流畅。</li>
<li>使用delete释放内存
delete someObject;
继续补充中……