1. ホーム
  2. asp.net

[解決済み] ブレイザーの性能

2023-01-22 06:07:22

質問

Blazorはまだαレベルですが、使い始めたいと思っています。

私の理解では、Blazorはクライアント側でC#をコンパイルするためにWebAssemblyを使用します。

そして、こんな疑問があります。

この方法は、例えばJavaScriptでコンパイルされたReact / Vue.jsよりも高速に動作するのでしょうか?

ページがロードされるたびに、ブラウザがWebAssemblyライブラリをダウンロードする必要があるというのは本当ですか?

インターネット上では、人気のある JavaScript フレームワークのパフォーマンスの比較はありません。そこで、Microsoft からの新しいフレームワークの理論的なパフォーマンスを知りたいのです。

どのように解決するのですか?

ページが読み込まれるたびに、ブラウザが WebAssembly ライブラリをダウンロードする必要があるというのは本当ですか? ライブラリをダウンロードする必要があるというのは本当ですか?

いいえ、ブラウザはファイルをキャッシュすることができます。一般的な CDN を利用することで、キャッシュすることができます。

このシステムは、例えばJavaScriptでコンパイルされたReact / Vue.jsよりも動作が速いのでしょうか? よりも動作が速いのでしょうか?

Blazor は WebAssembly を使用しています。紙の上では WebAssembly はどの JavaScript ライブラリよりも高速なはずです。しかし、すべてのブラウザがまだ成熟した WebAssembly パーサを持っているわけではありません。そのため、今のところブラウザが最適な速度でWebAssemblyを実行しないことがわかるかもしれません。

小さな Blazor アプリケーションを作成し、Firefox、Chrome、または エッジ . ほとんどの場合、Firefox は Chrome や Edge よりもはるかに速く Blazor アプリケーションを実行します。これは、ブラウザメーカーはまだ改善する必要があり、Firefox でも改善できることを示唆しています。

アプリケーションが DOM に頻繁にアクセスする必要がある場合、WebAssembly / Blazorは他のJavaScriptライブラリと比較して遅くなります。WebAssemblyはInvokes(現時点では遅い。 下記の私のBlazorベンチマークを参照してください)を使用せずに直接DOMにアクセスできないからです。

Firefox では、10,000 RegisteredFunction.InvokeUnmarshalle を呼び出すと 250 ミリ秒かかりますが、私の PC では Chrome と Edge は 2400 ミリ秒以上必要でした。純粋な JavaScript では、同じシナリオで 10 ミリ秒未満しかかかりません。

さらに、現在の Blazor の実装では、独自の MSIL エンジンを搭載しています。これは Blazor プロジェクトを実行するために 2 つのインタプリタが動作していることを意味し、1 人の会話を 2 人の翻訳者が通訳しているようなものです。現在、Microsoft は AOT コンパイラに取り組んでいますが、これはまだリリースされていません。それがリリースされれば、Blazor は現在の実装よりもずっと高速になるでしょう。

Mono と WebAssembly - 静的コンパイルに関する最新情報

WebAssemblyはWeb開発の未来であると安全に仮定できますが、現時点ではBlazorの未来について何も言うことはできません。紙の上では、Blazor はそこにあるどのフレームワークよりも速くなることができますが、理論を実用化するためには、WebAssembly のメンテナ、ブラウザ開発者、Microsoft、およびコミュニティからのコミットメントが必要なのです。

2018 年 7 月 10 日更新

WebAssemblyのレポジトリに新しい提案があります。

  1. WebAssembly が DOM を直接扱えるようにします。 インターフェースタイプ #8

  2. GCを用いたWebAssemblyのための参照型。 WebAssembly のための参照型

上記の2つの提案は、将来的にDOMとWebAssemblyの間のインタラクションをより高速にする道を開くでしょう。言い換えれば、Blazor は将来的にもっと速くなるでしょう。

2018年10月17日更新

Firefox チームは、JavaScript から WebAssembly への呼び出しを JavaScript から JavaScript へのメソッド呼び出しと同じくらい速く到達させることができました。現在のところ、Firefox は WebAssembly のサポートに関して他のどのブラウザーよりもはるかに先を進んでいます。

JavaScript と WebAssembly の間の呼び出しがついに高速化されました。