web-spawn
This crate provides a std::thread shim for WASM builds targeting web browsers.
It borrows from and is heavily inspired by both wasm-bindgen-rayon and wasm_thread but makes a couple different design choices.
Most notably, spawning is explicitly delegated to run in a background task and must be initialized at the start of the program. This task can either run on the main browser thread, or be moved to a dedicated worker to avoid potential interference from other loads.
Usage
Add web-spawn as a dependency in your Cargo.toml:
[]
= { = "0.1" }
Then you must ensure that spawning is initialized. One way to do this is to re-export the following function:
pub use start_spawner;
On the javascript side this can be awaited:
import init from /* your package */;
await ;
// Runs the spawner on a dedicated web worker.
await ;
Now, in the rest of your Rust code you can conditionally use web-spawn anywhere you would otherwise use std::thread::spawn:
use web_spawn as thread;
use thread;