怀疑精神,测试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框架的,我实在太多疑问,不过还没学完……习完再上文章。
浙公网安备 33010602011771号