メインコンテンツまでスキップ
Version: 0.18.0

Choosing a web library

はじめに#

Yewアプリはweb-sysstdwebで作ることができます。 これらのクレートはRustとWeb APIのバインディングを提供しています。 Cargoの依存クレートにyewを追加する際はどちらかを選ばなければいけません:

# Choose `web-sys`yew = "0.17"
# Choose `stdweb`yew = { version = "0.17", package = "yew-stdweb" }

Rust / Wasm 活動チームのサポートがあるweb-sysが推奨です。

使用例#

// web-syslet window: web_sys::Window = web_sys::window().expect("window not available");window.alert_with_message("hello from wasm!").expect("alert failed");
// stdweblet window: stdweb::web::Window = stdweb::web::window();window.alert("hello from wasm!");
// stdweb with js! macrouse stdweb::js;use stdweb::unstable::TryFrom;use stdweb::web::Window;
let window_val: stdweb::Value = js!{ return window; }; // <- JS syntax inside!let window = Window::try_from(window_val).expect("conversion to window failed");window.alert("hello from wasm!");

2つのクレートのAPIはわずかに異なりますが、だいたい同じ目的で似た機能が提供されています。

一方を選ぶ#

アプリにweb-sysstdwebのどちらを選ぶかにおいてはいくつかの見方があります。 注意として、一つのアプリに両方を用いることができるのですが、クレートをコンパイルした際にバイナリのサイズを小さくするには 一方だけを使用するのが良いです。

web-sysstdweb
プロジェクトの進捗状況Rust / Wasm 活動チームにより活発にメンテナンスされているGitHubで8ヶ月間動きなし
Web API のカバーRustのAPIはWeb IDLスペックから自動的に生成される。Browser APIはコミュニティにより追加。
RustのAPIのデザインほとんどのAPIコールおいてResultが返ってくるよう保守的なアプローチがとられている。しばしばResultを返さずpanicするようになっている。例えば stdweb::web::window()ワーカーの中で呼ばれるパニックする。
サポートされているビルドツール

  • wasm-bindgen
  • wasm-pack

  • cargo-web
  • wasm-bindgen
  • wasm-pack
サポートされているターゲット
  • wasm32-unknown-unknown
  • wasm32-unknown-unknown
  • wasm32-unknown-emscripten
  • asmjs-unknown-emscripten