Согласен. По идее сигналы должны быть быстрее, так как нет сравнения строк, но, походу, так как либа не нативная — работает медленнее, чем EventDispatcher, который вшит в плеер. Если результаты тестирования вызывают сомнения — проверь сам.
У GenericEvent есть параметр bubbles, если выставить в true — будет баблинг работать. Но это только для DeluxeSignal.
Плюсы сигналов в том, что не нужно создавать отдельных классов ивентов и прописывать методы clone для них. просто объявляешь:
var signalProcessComplete:Signal = new Signal(int, String, MyType)
и можешь сразу этот сигнал использовать. получается очень компактно, быстро и без «бойлеров» :)
Для меня звучит не убедительно. С одной стороны, подписка на события — это не такая уж и большая часть кода, чтобы за её счёт уменьшать объём кода. С другой, для приложений выкладываемых в сеть производительность очень важна, т.к. им могут воспользоваться люди со слабыми ПК.
Что хотелось бы увидеть:
1. Если объём кода уменьшается, то насколько? Например, применил сигналы в этом проекте — объём кода уменьшился на 5%.
2. Рассказали бы, какие решения можно перенести с C# в ActionScript. И почему их нельзя или неудобно использовать без сигналов.
Есть еще одно важное дополнение. Вот тут: knowledge.robotlegs.org/discussions/questions/351-signals-vs-events-whats-better
в комментариях пишут:
Сигналы диспетчатся в текущем фрейме. Про event нельзя однозначно сказать в каком фрейме вы получите вызов обработчика. Возможно в текущем, возможно в следующем, смотря как решит флешплеер. Где-то мне еще аналогичные сравнения попадались.
samoiloff.com/tmp/Main.as — вот их класс, добавил только тайминги на тесты, ну никак не получаются сигналы быстрее диспатчера. (Время на 100 000 лупов в миллисекундах).
Main.Main(); event: 250
Main.Main(); signal: 377
Может я что-то делаю не так? Тестировал правда на на win7.
Если взять не simpleSignal и simpleEvent, а dataEvent и dataSignal, то на Windows 7, FP 10.1 картина меняется (указано среднее округлённое время в 5 повторах):
Main.Main(); event: 182
Main.Main(); signal: 186
Один раз из пяти повторов было, что сигналы быстрее событий:
Снова сигналы