怀疑精神,测试as3-Signal

mac2022-06-30  85

最近在家休养充电,看过许多文章都说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= 9999EventDispatcher发消息用时 7 毫秒tmpNum= 9999Signal移出 9999 个监听用时 150 毫秒EventDispatcher移出 9999 个监听用时 109 毫秒

 

第2次

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

 

第3次

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

 

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

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

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

 

转载于:https://www.cnblogs.com/pelephone/archive/2012/03/23/as3-signal-test.html

最新回复(0)