flash最另人诟病的地方就是性能差,在一个类中,如果变量越多,所占用内存就越多。在类中声明一个变量后,实例化多少个对象,就会有多少个实例变量占用内存。如例:
package {
public class MyClass {
private var _name:String;
private var _target:Object;
public function MyClass(name:String) {
_name=name;
_target={};
}
public function getName():String{return _name}
public function get target(){return _target}
}
}
实例两个对象进行测试:
var cla01=new MyClass('test class');
var cla02=new MyClass('test class');
trace(cla01.getName===cla02.getName,cla01.target===cla02.target); // false false
受javascript的原型对象(prototype)的启发,我们把实例共用的属性或函数放在一个单例对象内,然后在类中把属性或方法指向单例中相对应的属性或函数,那么由该类实例化出来的对象的属性或方法,就会指向同一个内存,从而节省的内存提高的性能。如:
package {
public class MyClass {
private var _name:String;
private var _target:Object;
public function MyClass(name:String) {
_name=name;
//_target={};
_target=Singleton.target;
_target.name=name;
}
public function getName(){return _name}
public var getClobalName=Singleton.getClobalName;
public function get target(){return _target}
}
}
class Singleton{
static public var target:Object={name:'Global Name'}
static public function getClobalName():String{return target.name}
}
测试如下:
var cla01=new MyClass('cla01');
var cla02=new MyClass('cla02');
trace(cla01.getClobalName===cla02.getClobalName,cla01.target===cla02.target); // true true
trace(cla01.getClobalName()===cla02.getClobalName(),cla01.getClobalName()); // true cla02
trace(cla01.getName===cla02.getName) //false