今回で最後になります。
- wasmに入門してみる【1】
- wasmに入門してみる【2】
- wasmに入門してみる【3】
- wasmに入門してみる【4】
- wasmに入門してみる【5】
- wasmに入門してみる【6】
- wasmに入門してみる【7】
wasmのサイズを小さくする
いくつかの設定を追記することで、wasmのサイズを小さくすることができます。
Shrinking .wasm Size - Rust and WebAssembly
Rustのリリースビルドみたいなものですね。
まず必要なパッケージをインストールします。
cargo install wasm-opt
Cargo.toml
に設定を追記します。
[profile.release]
lto = true
opt-level = "z"
再ビルドする前に、一度どのくらいの大きさなのか見ておきましょう。
% wc -c pkg/wasm_game_of_life_bg.wasm
25136 pkg/wasm_game_of_life_bg.wasm
大体25KBくらいでした。
では先程インストールしたwasm-opt
で最適化していきます。
wasm-opt -Oz -o output.wasm pkg/wasm_game_of_life_bg.wasm
最適化できました。
% wc -c output.wasm
24955 output.wasm
あんまり変わっていないですね。。
wasm-packでもビルドしてみて、wasmファイルに変化があるか確認してみます。
%wasm-pack build
[INFO]: 🎯 Checking for the Wasm target...
[INFO]: 🌀 Compiling to Wasm...
Compiling wasm-game-of-life v0.1.0 (/home/username/Project/personal/wasm-game-of-life)
warning: unused macro definition: `log`
--> src/lib.rs:25:14
|
25 | macro_rules! log {
| ^^^
|
= note: `#[warn(unused_macros)]` on by default
warning: `wasm-game-of-life` (lib) generated 1 warning
Finished release [optimized] target(s) in 0.41s
[INFO]: ⬇️ Installing wasm-bindgen...
[INFO]: found wasm-opt at "/home/username/.cargo/bin/wasm-opt"
[INFO]: Optimizing wasm binaries with `wasm-opt`...
[INFO]: Optional fields missing from Cargo.toml: 'description', 'repository', and 'license'. These are not necessary, but recommended
[INFO]: ✨ Done in 0.86s
[INFO]: 📦 Your wasm pkg is ready to publish at /home/username/Project/personal/wasm-game-of-life/pkg.
ビルドできたので確認します。
%wc -c pkg/wasm_game_of_life_bg.wasm
24620 pkg/wasm_game_of_life_bg.wasm
多少wasm-buildでやったほうが軽くなったけど、あんまり変わらないですね。
(チュートリアルでは10KBは軽くなってたのに…)
npmにパブリッシュする
wasm-packを使ってnpmにパッケージをパブリッシュすることができます。
まずはnpmアカウントにログインします。
wasm-pack login
上記のコマンドを打つと、ブラウザでログイン処理を行うように案内されます。
ログインができるとターミナル側でログインが完了となります。
ビルドができているのであれば、publishコマンドですぐパッケージを公開することができます。
wasm-pack publish
ただし、このチュートリアルパッケージは既に公開されているため、publishしても失敗します。
公開されているパッケージ名の重複は許されていないため、注意する必要があります。
(以下のエラーメッセージはこのチュートリアルパッケージを公開しようとしたときのメッセージです。)
npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/wasm-game-of-life - Package name too similar to existing package wasm_game_of_life; try renaming your package to 'username/wasm-game-of-life' and publishing with 'npm publish --access=public' instead
まとめ
結構長くチュートリアルをやりました。
チュートリアルはこれで終わったんですが、調べていて気になったビルド方法がありました。
今までのチュートリアルよりもっと原始的(?)なやり方です。
時間があればこれもやりたかったです。
まぁでもとりあえずこれでwasmの開発ができるようになった…と言っていいんじゃないかな。