峰之博纹 - Pelephone个人博客

怀疑精神,测试as3-Signal

最近在家休养充电,看过许多文章都说robotlegs用的as3-signal比adobe官方的事件效率高4倍。报着怀疑精神我写了以下测试。

主要测试在添加事件和广播事件时用时。
 
首先先上测试代码:
// 测试次数
		var forCount:int = 9999;
		// 测试变化的数字
		var tmpNum:int = 0;
		
		// 动态生成方法用于监听
		var funObj:Object = {};
		for (var i:int = 0; i < forCount; i++) 
			funObj["onFF"+i] = function(e:*=null):void{tmpNum++};
		
		var testSn:Signal = new Signal();
		var startTime:int = getTimer();
		for (i = 0; i < forCount; i++) 
		{
			testSn.add(funObj["onFF"+i]);
		}
		trace("Signal添加",i,"个监听用时",getTimer()-startTime,"毫秒");
		
		var testEp:EventDispatcher = new EventDispatcher();
		
		startTime = getTimer();
		for (i = 0; i < forCount; i++) 
		{
			testEp.addEventListener("aaa",funObj["onFF"+i]);
		}
		trace("EventDispatcher添加",i,"个监听用时",getTimer()-startTime,"毫秒");
		
		tmpNum = 0;
		startTime = getTimer();
		testSn.dispatch();
		trace("Signal发消息用时",getTimer()-startTime,"毫秒");
		trace("tmpNum=",tmpNum);
		
		tmpNum = 0;
		startTime = getTimer();
		testEp.dispatchEvent(new Event("aaa"));
		trace("EventDispatcher发消息用时",getTimer()-startTime,"毫秒");
		trace("tmpNum=",tmpNum);
		
		
		startTime = getTimer();
		for (i = 0; i < forCount; i++) 
		{
			testSn.remove(funObj["onFF"+i]);
		}
		trace("Signal移出",i,"个监听用时",getTimer()-startTime,"毫秒");
		
		startTime = getTimer();
		for (i = 0; i < forCount; i++) 
		{
			testEp.removeEventListener("aaa",funObj["onFF"+i]);
		}
		trace("EventDispatcher移出",i,"个监听用时",getTimer()-startTime,"毫秒");

  

 
 测试结果数据如下:

第1次

Signal添加 9999 个监听用时 894 毫秒
EventDispatcher添加 9999 个监听用时 21 毫秒
Signal发消息用时 7 毫秒
tmpNum= 9999
EventDispatcher发消息用时 7 毫秒
tmpNum= 9999
Signal移出 9999 个监听用时 150 毫秒
EventDispatcher移出 9999 个监听用时 109 毫秒

 

第2次

Signal添加 9999 个监听用时 911 毫秒
EventDispatcher添加 9999 个监听用时 27 毫秒
Signal发消息用时 8 毫秒
tmpNum= 9999
EventDispatcher发消息用时 7 毫秒
tmpNum= 9999
Signal移出 9999 个监听用时 146 毫秒
EventDispatcher移出 9999 个监听用时 111 毫秒

 

第3次

Signal添加 9999 个监听用时 955 毫秒
EventDispatcher添加 9999 个监听用时 28 毫秒
Signal发消息用时 7 毫秒
tmpNum= 9999
EventDispatcher发消息用时 7 毫秒
tmpNum= 9999
Signal移出 9999 个监听用时 147 毫秒
EventDispatcher移出 9999 个监听用时 110 毫秒

 

三次结果基本一致,EventDispatcher在添加监听上的效率明显比signal快相当多,而在发消息(托管消息)和移除消息时,两者效率差不多。能力有限吧,我实在想不出还有别的方式能测试signal比EventDispatcher快的。

其实侦听者的代码并不难写,不用遍历播消息的话效率基本都差不多。个人建议用官方的东西,毕竟adobe针对性做过优化,而且功能上来说比signal多。

还想评评robotlegs框架的,我实在太多疑问,不过还没学完……习完再上文章。

 

posted @ 2012-03-23 16:05  Pelephone  阅读(1896)  评论(2编辑  收藏  举报