1. ホーム
  2. c#

Blazor vs Razor

2023-10-22 19:04:27

質問

Blazorの発明で、これらの2つの言語の間に(コードの作成と実際のコンパイル/実行の両方で)大きな効率性があるのかどうか疑問に思っています。

https://github.com/SteveSanderson/Blazor

実際に実装された方がいらっしゃいましたら、パフォーマンステストや、古い Razor と比較した場合のコードライティングプロセスに関する逸話的な(すみません、こんなことをお願いしてしまって)フィードバックはありますか?

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

以下に紹介する情報は、ほとんど以下のものから言い換えています。 Steven Anderson の 2 月 2 日のブログ エントリー と私自身の理解に基づいています。

Blazor は、現在の .NET Razor スタックのアイデアを最新の SPA フレームワークのアーキテクチャと組み合わせることを意図しています。 のアイデアを最新の SPA フレームワークのアーキテクチャと組み合わせることを意図しています。

コードの作成

は柔軟であることを意図しており、この例に見られるように、コンポーネントベースのレイアウトを推奨しています。

<div class="my-styles">
   <h2>@Title</h2>
   @RenderContent(Body)
   <button onclick=@OnOK>OK</button>
</div>

@functions {
    public string Title { get; set; }
    public Content Body { get; set; }
    public Action OnOK { get; set; }
}

で、htmlのマークアップに再利用可能なコンポーネントを作成します。

<MyDialog Title="Ski Lift controls" onOK="DismissSkiDialog">
    Gondola @gondolaId is now <em>running</em>
</MyDialog>

実行

Blazorは高速であることが期待されています。なぜならwebAssemblyは高速だからです。ブラウザのワームローダーによって直接実行されるバイトコードにコンパイルされます。javascript では、例えば .js ファイルを最初に読み込む必要があり、別々のファイルを結合し、次に構文解析とトークン化を行ってツリー構造に構築し、ブラウザの javascript エンジン ( クロームの v8 エンジン など) によって解釈されます。

webAssemblyとjavascriptの実行の詳細な比較は、以下を参照してください。 この記事 .

SPAアーキテクチャとデザイン

ウェブ用のjavascriptで作られた素晴らしいフレームワークがすでにあるように、BlazorはReact、Vue、Angularといった最新のフレームワークですでに使われているアイデアに触発され、次のような投稿で詳しく説明されたコンセプトを特徴とする予定です。

  • レイアウト
  • ルーティング
  • 依存性インジェクション
  • レイジーローディング
  • ユニットテスト

これらのコンセプトは Razor のサーバサイドには存在しますが、クライアントサイドには存在しないことに注意してください。フロントエンドのルーティングはRazorでは利用できず、そのシナリオを埋めるためにしばしばjavascriptフレームワークと結合されてきました。

私は個人的に、RazorのページをAngularJsと一緒に提供するエンタープライズアプリケーションに携わってきました。それは時に厄介になることがあり、決して「きれい」だとは感じませんでした。

まとめ

Razorは、APIロジックやサーバーサイドテンプレートを扱うことができるサーバーベースのアーキテクチャのためのソリューションですが、javascript以外のクライアントサイドロジックを提供することはできません。

Blazor は次のステップ(そして願わくば後継)で、Razor と同じサーバサイドの機能を可能にしますが、クライアントサイドのロジックを統合するために C# を使用してクライアントサイドのロジックを統合します。

私は現在、Blazorを使って小さなテストプロジェクトに取り組んでおり、今のところ使いやすいと感じています。しかし、ブログやGitHubページの警告にあるように、本番環境にはほど遠い状態です。

2018-09-26よりサードパーティ編集

.NET Conf 2018で、以下のことが発表されました。 Razor コンポーネント ("server-side Blazor") は .NET Core 3.0 に含まれる予定です。 . このコードが表示されました。

// inside index.cshtml - serverside use of blazor
<SurveyPrompt Title="How is Blazor working for you?" />
<div>
     <img id="bot" src="@imageurl" />
<div>
<button class="btn btn-primary" onclick="@changeImage">Click me</button>

@functions{

    string imageurl = "/images/dotnet-bot-1.png";

    void changeImage()
    {
        if(imageurl.Contains("1"))
        {
            imageurl= imageurl.Replace("1", "2");
        } 
        else 
        {
            imageurl= imageurl.Replace("2", "1");
        }
     }
}