Observables: loops versus EventTarget (3 listeners) (version: 0)
When the “observable” pattern is implemented in JavaScript, it's practically
always done using a loop over callbacks. One problem with this approach is that
an exception in one handler will crash the entire loop. You can work around
this by wrapping the invocation in a try/catch block, but in doing so, you
silently swallow the error.
The browser provides an event dispatcher for DOM elements that runs each handler
in a separate execution context, providing a better failure mode for independent
listeners. `EventTarget` is an interface, so you can't directly instantiate
one. But you can hijack the `EventTarget` implementation from a dummy object.
This test compares multi-listener dispatches using loops and the built-in
`EventTarget`. My expectation is that the native mechanism will carry some
overhead, partly because of the bespoke execution context, and partly because of
the extra properties instantiated on each `CustomEvent` instance. This method
also has to look up events by their (string) names, rather than using direct
object reference.
See http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/
Comparing performance of: loop observable vs EventTarget observable
Memory measurements supported only in Chrome.
For precise memory measurements Chrome must be launched with --enable-precise-memory-info flag.
More information: Monitoring JavaScript Memory
Test case name
Result
loop observable
EventTarget observable
Fastest:N/A
Slowest:N/A
Latest run results:
Run details: (Test run date:
2 years ago)
Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Mobile Safari/537.36