提高SWF性能的一点技巧

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
原文地址:https://www.cnblogs.com/fxair/p/2335647.html