Choosing a web library
简介
Yew 应用程序可以通过 web-sys 或者 stdweb 来构建。这两个 crates 提供了 Rust 和 Web API 之间的绑定。当把 yew 添加到你的 cargo 依赖时,你需要选择它们其中之一:
1. # 选择 `web-sys`
2. yew = "0.17"
4. # 选择 `stdweb`
5. yew = { version = "0.17", package = "yew-stdweb" }
我们建议选择 web-sys,因为它是由 Rust / Wasm 工作组 提供支持。
示例用法
1. // web-sys
2. let window: web_sys::Window = web_sys::window().expect("window not available");
3. window.alert_with_message("hello from wasm!").expect("alert failed");
5. // stdweb
6. let window: stdweb::web::Window = stdweb::web::window();
7. window.alert("hello from wasm!");
9. // stdweb 搭配 js! 宏
10. use stdweb::js;
11. use stdweb::unstable::TryFrom;
12. use stdweb::web::Window;
14. let window_val: stdweb::Value = js!{ return window; }; // <- 里面使用 JS 语法
15. let window = Window::try_from(window_val).expect("conversion to window failed");
16. window.alert("hello from wasm!");
两个 crate 的 API 略有不用,但他们的目标大致相同,功能相似。
选择其中之一
当为你的应用程序选择使用 web-sys 还是 stdweb 时,有几个不同的角度需要考虑。注意,可以在一个应用程序中同时使用两者,但是为了使编译后的 crate 的最小化,最好选择其中之一。
web-sys |
stdweb |
|
|---|---|---|
| 项目状态 | 由 Rust / Wasm 工作组 积极维护 | 超过八个月没有任何Github活动 |
| Web API 覆盖率 | Rust API 是根据 Web IDL 规范自动生成的 | 浏览器 API 是根据需求由社区添加 |
| Rust API 设计 | 采取保守的方法,为大多数 API 调用返回 Result |
通常拒绝返回Result而更倾向于使用 panic。例如,在 worker 中调用 stdweb::web::window() 将 panic。 |
| 支持的构建工具 | - wasm-bindgen - wasm-pack |
- cargo-web - wasm-bindgen - wasm-pack |
| 支持生成的目标代码 | - wasm32-unknown-unknown |
- wasm32-unknown-unknown - wasm32-unknown-emscripten - asmjs-unknown-emscripten |
