#tick #executor #ticker #events #web #tasks

wasm-ticker

Non-block tick executor for WebAssembly Rust

3 releases

0.1.2 Sep 4, 2024
0.1.1 Sep 4, 2024
0.1.0 Sep 3, 2024

#205 in WebAssembly

Download history 355/week @ 2024-09-02

355 downloads per month

MIT license

29KB
544 lines

wasm-ticker

Non-block tick executor for WebAssembly Rust.

Ticker callbacks queue as Tasks to JavaScript event loop. Instead of Microtasks or just stacking in, Tasks won't block current host context and UI rendering thread. See also https://developer.mozilla.org/docs/Web/API/HTML_DOM_API/Microtask_guide/in_depth

Ticker API Platform Interval
Browser / Node
MessageChannelTicker Channel Messaging * >4µs / <1µs
ImmediateTicker setImmediate Node ~1µs
TimeoutTicker setTimeout * ~4ms / ~14ms
AnimationFrameTicker requestAnimationFrame Browser According to device
AutoTicker One of above * N/A

Speed Tests:

wasm-pack test --node --release --test speed
# MessageChannelTicker: 10726000/10s, interval: 932ns
# ImmediateTicker: 9051901/10s, interval: 1.104µs
# TimeoutTicker: 664/10s, interval: 15.06024ms
# AutoTicker: 9879000/10s, interval: 1.012µs

wasm-pack test --chrome --release --test speed # with devtools closed
# MessageChannelTicker: 2359423/10s, interval: 4.238µs
# TimeoutTicker: 2140/10s, interval: 4.672897ms
# AnimationFrameTicker: 1438/10s, interval: 6.954102ms
# AutoTicker: 2405336/10s, interval: 4.157µs

wasm-pack test --chrome --release --test speed # with devtools opened
# MessageChannelTicker: 847715/10s, interval: 11.796µs
# TimeoutTicker: 2134/10s, interval: 4.686035ms
# AnimationFrameTicker: 1441/10s, interval: 6.939625ms
# AutoTicker: 860572/10s, interval: 11.62µs

Dependencies

~7–9.5MB
~176K SLoC