[解決済み] ブレイザーの性能
質問
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のレポジトリに新しい提案があります。
-
WebAssembly が DOM を直接扱えるようにします。 インターフェースタイプ #8
-
GCを用いたWebAssemblyのための参照型。 WebAssembly のための参照型
上記の2つの提案は、将来的にDOMとWebAssemblyの間のインタラクションをより高速にする道を開くでしょう。言い換えれば、Blazor は将来的にもっと速くなるでしょう。
2018年10月17日更新
Firefox チームは、JavaScript から WebAssembly への呼び出しを JavaScript から JavaScript へのメソッド呼び出しと同じくらい速く到達させることができました。現在のところ、Firefox は WebAssembly のサポートに関して他のどのブラウザーよりもはるかに先を進んでいます。
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Dockerコンテナのランタイムパフォーマンスコストとは何ですか?
-
[解決済み] 文字列の最初の文字を大文字にする(最大限のパフォーマンスを発揮する)
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】ASP.NET IdentityのIUserSecurityStampStore<TUser>インターフェースとは何ですか?
-
[解決済み] イベントログへの書き込み時にSystem.Security.SecurityExceptionが発生する。
-
[解決済み] データ入力後に文字列をトリミングする最適な方法。モデルバインダーをカスタムで作成した方が良いですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
swagger uiをasp.net coreに統合する原理
-
Net Core HttpClient処理 レスポンス圧縮の詳細
-
NET 6 の今後の新機能 暗黙の名前空間参照
-
403 - アクセス拒否。IIS7 でファイルを開くと、アクセス拒否されます。
-
Application_End イベントをブロックする解決策
-
一時的なクラスを生成できない(result=1)、問題の解決方法
-
[解決済み】ASP.NETのWebサイト全体のブラウザキャッシュを無効にする
-
[解決済み] ASP.NETの新しいセキュリティ脆弱性の深刻度と回避方法について教えてください。
-
[解決済み] Razorとインラインコードブロックによるif文の使用方法
-
[解決済み] コンテンツ」項目が重複して含まれていました。.NET SDKは、デフォルトでプロジェクトディレクトリの'Content'アイテムを含めます。