Flash 10.1 LocalConnection的性能问题
Flash通过LocalConnection来处理两个Flash文件之间的通信,简单例子可以参考:使用LocalConnction在SWF之间通信。
升级Flash插件到10.1之后,发现应用变得很慢,其最终原因是在设置名称是使用”_”开头,而“_”正好是LocalConnection不可预知的不同域通信的标志。
LocalConnection在不同的域环境(同一个域中、具有可预知域名的不同域中、具有不可预知的不同域)使用情况不同:
1、同一个域。这是LocalConnector对象最简单的情况,只允许位于同一个域中的LocalConnection对象通信,在同一域通信,无需实施特殊的安全措施,只需根据connecionName参数的同一个值进行通信:
receiver.swf:
public function Init():void{
var conn:LocalConnection=new LocalConnection();
conn.client=this;
try{
conn.connect("connectionName");
}
catch(error:ArgumentError){
trace("connectionName exists");
}
}
public function testHandler(msg:String):void{
}
sender.swf:
var conn:LocalConnection;
conn=new LocalConnection();
conn.send("connectionName", "testHandler", "Hello World!");
2、可预知域名的不同域。当不同域中的两个Flash文件通信是,需要通过调用allowDomain()方法来运行在这两个不用域之内进行通信。在发送方Flash的send()方法使用接收方LocalConnection对象的域名限定连接名:
receiver.swf(在a.com域):
public function Init():void{
var conn:LocalConnection=new LocalConnection();
conn.allowDomain("www.b.com");
conn.client=this;
try{
conn.connect("connectionName");
}
catch(error:ArgumentError){
trace("connectionName exists");
}
}
public function testHandler(msg:String):void{}
sender.swf(在www.b.com域):
var conn:LocalConnection;
conn=new LocalConnection();
conn.send("a.com:connectionName", "testHandler", "Hello World!");
3、不可预知域名的不同域。LocalConnection通过allowDomain(*)允许从所有域的调用,也可以通过调用多次allowDomain()方法来添加允许的域.在不可以预知的不同域中,需要在connectName的名称之前添加下划线(“_”)。
receive.swf:
public function Init():void{
var conn:LocalConnection=new LocalConnection();
conn.allowDomain("*");
conn.client=this;
try{
conn.connect("_connectionName");
}
catch(error:ArgumentError){
trace("connectionName exists");
}
}
public function testHandler(msg:String):void{}
sender.swf:
var conn:LocalConnection;
conn=new LocalConnection();
conn.send("_connectionName", "testHandler", "Hello World!");
再次提醒下,在同一个域中使用LocalConection通信不要使用“_”开头来作为connectName。