Я сделал command pooling прототип:
https://github.com/MindScriptAct/mvc...ee/release_1.3
Результат выглядит хорошо!
Тест для сравнения - сценарий:
- send a message
- execute command with dependencies
- command updates proxy
- proxy send data change message
- mediator handles data change massage.
результат: Сколько действий вы можете сделать в 1 миллисекунду.
RobetLegs 1 dependency - 46 runs/1ms
PureMvc cammand 1 dependency - 113 runs/1ms
mvcExpress command 1 dependency, No pooling - 375 runs/1ms
mvcExpress command 1 dependency, With pooling - 472 runs/1ms
mvcExpress cammand 5 dependencies, No pooling - 227 runs/1ms
mvcExpress cammand 5 dependencies, With pooling - 457 runs/1ms
Мне еще нужно проверить, как command pool тормозит всю систему... Но результаты выглядят хорошо!
как это использовать: вместо extend Command - использовать PooledCommand!
Код AS3:
package com.mindScriptAct.mvcExpressSpeedTest.controller {
...
public class TestCommand extends PooledCommand {
[Inject]
public var testProxy:TestProxy;
public function execute(params:Object):void {
testProxy.doStuff();
}
}
}
Asynchronous command:
Код AS3:
package com.mindScriptAct.mvcExpressSpeedTest.controller {
...
public class TestCommand extends PooledCommand {
[Inject]
public var testProxy:TestProxy;
public function execute(blank:Object):void {
lock(); // diasble autamatic pooling.
var imageLoader:Loader = new Loader();
imageLoader.addEventListener(Event.COMPLETE, handleImmageLoad);
imageLoader.load(new URLRequest("example.jpg"));
}
private function handleImmageLoad(event:Event):void {
// do stuff...
unlock(); // pool command.
}
}
}