A simple alternative to events, signals and callbacks with an emphasis on performance.
MIT License
A simple alternative to events and signals with an emphasis on performance.
Can be used as an alternative to events / signals.
var onComplete = new MiniRunner('onComplete');
//listenerObject needs to have a 'onComplete' function
onComplete.add(listenerObject);
//emit and all listeners will have their 'onComplete' functions called
onComplete.emit(data);
Can be used to execute a funcition on many objects. Handy for games. If you need to update you game elements each frame:
var updateRunner = new MiniRunner('update');
// gameItems should all have a 'update' function
updateRunner.add(gameItem1);
updateRunner.add(gameItem2);
updateRunner.add(gameItem3);
// update game elements..
updateRunner.emit();
Pros:
Cons:
In practice I have found the MiniRunner increadibly useful and so thought it would be nice to share with the world. It currently forms the backbone of the messaging system in our game engine. Its working out great for things like update events, collison events etc.
Great to use if you are say looping through and array and calling the same function on each object. The resulting code is cleaner than a loop whilst still keeping the performance as fast as possible.
So yeah, if you are dispatching signals/events to a lot of listeners often (like everyframe often), then I would considor using this alternative. For most cases, this performace boost is not really important enough to switch from your current fave.
Think of this as a nice alternative for when speed really counts!
to run the tests, move to the runner-benchmark folder then run the following:
npm run benchmark
Next open you browser (http://localhost:9966). The test is run in the console. The test result above comes from macbook pro chrome 58.
Any thoughts or comments hit me up on twitter @doormat23, I'd love to hear them!