Чем вы описываете разницу между
- Система передачи сообщений на основе пользовательских событий
- запуск событий DOM вручную.
Первый способ использовать события для передачи сообщений. Примером может служить создание EventEmitter
Последний - это просто способ использовать встроенную браузерную систему событий DOM вручную. Это в основном использует API событий DOM 3 , который изначально существует в (компетентных / современных) браузерах.
Так что вопрос просто в том, что вы хотите сделать? Выстреливаете события DOM или используете события для передачи сообщений?
Тест, показывающий пользовательские события DOM 3, на 98% медленнее
Кажется, у DOM огромные накладные расходы. Это происходит потому, что он поддерживает распространение событий и всплытие. Это происходит потому, что он поддерживает привязку событий к элементу DOMElement.
Если вам не нужны какие-либо функции событий DOM3, используйте библиотеку pub / sub.
[Изменить 2]
Все дело в обработке ошибок, то, как вы ее обрабатываете, зависит от вас. Если вы знаете , что ваш источник событий является синхронным, то это предполагаемое поведение. Либо выполните собственную обработку ошибок, либо используйте setTimeout
, чтобы сделать ее асинхронной.
Будьте осторожны, если вы сделали это асинхронным, вы «потеряете» гарантию того, что обработчики событий выполнили свою логику после возврата вызова emit / trigger / dispatch. Это требует совершенно другого дизайна высокого уровня, чем предположение, что источники событий являются синхронными. Это не выбор, чтобы сделать слегка