-
Notifications
You must be signed in to change notification settings - Fork 0
MS_WebAssembly
nishi_74322014 edited this page Aug 21, 2026
·
1 revision
- 戻る(その他、開発の色々)
下記リンク先に記載。
補足(本ページはハブである): 原文はリンク集で、
内容の本体は 開発基盤部会 Wiki(DNET_WebAssembly.md)側にある。
ここでは、.NET 開発者にとっての WebAssemblyを補っておく。
補足(WebAssembly とは何か): .NET 開発の文脈で最も重要な技術の 1 つ
になったため、基本を押さえておく。【WebAssembly(Wasm)】 ブラウザで動く【バイナリ命令形式】 ・JavaScript より高速(ネイティブに近い) ・【言語を問わない】(C/C++/Rust/Go/C# … からコンパイルできる)★ ・サンドボックス内で動く(安全) ・全主要ブラウザが対応済み(2017 年頃から)【JavaScript との関係】★ 誤解が多い点 ・Wasm は JavaScript を【置き換えるものではない】 ・Wasm は【DOM を直接操作できない】 → JavaScript 経由で操作する(相互運用) ・「計算の重い部分だけ Wasm、UI は JS」という 使い分けが本来の想定だった.NET との関わり:
技術 内容 Blazor WebAssembly .NET ランタイムを Wasm で動かし、C# でクライアントを書く ★ Uno Platform XAML の UI を Wasm でも動かす .NET の Wasm ビルド wasm-toolsワークロード。ライブラリ単体の Wasm 化WASI ブラウザ外で Wasm を動かす仕様(サーバ・エッジ) 【Blazor WebAssembly の仕組み】 ブラウザ └ Wasm 上で【.NET ランタイム(Mono ベース)】が動く └ アプリの .dll(IL)を読み込んで実行 ※ AOT を有効にすると IL を Wasm に事前コンパイルできる → 【C# のコードがブラウザで動く】★ → JavaScript を書かずに SPA が作れるトレードオフ:
【利点】 ・サーバとクライアントで【C# のコードとモデルを共有できる】★ ・型安全([TypeScript](MS_TypeScript) より強い) ・既存の .NET ライブラリが使える ・JavaScript のエコシステムを覚えなくてよい 【欠点】 ・【初回のダウンロード サイズが大きい】(ランタイム込み) → 数 MB。トリミング・圧縮・AOT で削るが、JS の SPA より重い ・起動が遅い(ランタイムの初期化) ・実行速度は【ネイティブ JS より遅い場合がある】 → 特に DOM 操作は JS 相互運用のコストがかかる ・デバッグ体験が JS ほど成熟していないBlazor の 2 つのモデルは必ず区別する。
Blazor Server Blazor WebAssembly 実行場所 サーバ ブラウザ(Wasm) 通信 SignalR で UI 差分を往復 初回に一式をダウンロード 初回表示 速い 遅い 応答性 ネットワーク遅延に依存 ★ ローカルで完結 オフライン 不可 可(PWA 化できる) サーバ負荷 接続ごとに状態を持つ 低い 秘密情報 サーバにあるので安全 ブラウザに置かれる(漏れる)★ 【.NET 8 以降】 「Blazor Web App」テンプレートで 【ページ単位・コンポーネント単位に render mode を選べる】 ・静的 SSR ・Server(対話) ・WebAssembly ・Auto(初回は Server、以降 Wasm)★ → 二者択一ではなくなった
補足(ブラウザ外の Wasm ── WASI): 近年の動きとして重要である。
【WASI(WebAssembly System Interface)】 Wasm を【ブラウザの外】で動かすための仕様 ・ファイル、ネットワーク等の API を規定 ・コンテナより軽量・高速に起動する ・言語を問わず、同じバイナリがどこでも動く ★ 【用途】 ・エッジ コンピューティング(起動が数 ms) ・プラグイン機構(サンドボックスで安全に他人のコードを動かす) ・サーバーレス 【.NET の対応】 wasi-experimental ワークロードで実験的に対応 → まだ本番向けとは言い難い段階「コンテナの次」として注目されているが、
現時点で業務システムに採用する段階ではない——
という距離感で捉えておくのが妥当である。
- WebAssembly(
DNET_WebAssembly.md)
- ASP.NET Core Blazor のホスティング モデル
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/hosting-models - ASP.NET Core Blazor WebAssembly のパフォーマンスのベスト プラクティス
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/performance - ASP.NET Core Blazor のレンダリング モード(.NET 8 以降)
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/components/render-modes
Tags: 移行, プログラミング, ASP.NET, ASP.NET Web API, ASP.NET SPA, JavaScript
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。