Blazor WebAssembly ASP.NET Core HostedなプロジェクトでMessagePackを入れてみる
通常、SPAなWebシステムのバックエンドとフロントエンドのやりとりはWebAPIを介して行われるのが通常である。
すなわち、バックエンドとフロントエンドとのやりとりはJSONあるいはXMLのテキストをHTTPでやりとりする。
しかしながら、C#の世界には非常に高速なシリアライザであるMessagePack for C#というものが存在する。
クライアント・サーバともにC#である場合にはとても有用な選択肢である。そして、ASP.NET Core Web API + Blazor WebAssemblyのシステムもそれの適用範囲といえる。
シリアライズ・デシリアライズよりも遙かに遅いデータベースとかネットワークとかいうものも存在するがここは余り考えないことにしてこれを置き換えることでどれだけ体験が良くなるか試すこととした。
まずは、本当に動くかどうか?というわけで基本のテンプレートで試してみる。
MessagePackおよびMessagePackAnalyzerをClient、Server、Sharedの各プロジェクトにNugetしておく。
まず、SharedプロジェクトにあるWeatherForcastクラスに属性をつけます。
コントローラを以下のように変更します。
最後に、画面側を以下のようにしました。
Try-catchはデバッグ用に入れたもので例外を握りつぶしてしまってるので外した方がよいでしょう。
これでいつものように見慣れた画面が見えました。
DevToolsを開いてネットワークを確認してみるとWeatherForcastにアクセスしていることが分かります。そして、バイナリデータで送られてきているようです。
このことから、JSONではなくMessagePackに動作が切り替わって動作していると分かると思います。
.NET ラボ勉強会2023年1月の登壇にてMessagePackにしてパフォーマンス面でどうであったかしゃべりたいと思います。