Blazor vs Razor
質問
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");
}
}
}
関連
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み] Razor View Page で名前空間をインポートするにはどうしたらいいですか?
-
[解決済み] razor viewエンジンでの@文字のエスケープ
-
[解決済み] razor で三項演算子を使用するには (特に HTML 属性について)?
-
[解決済み] Razor でローカル変数を宣言するには?
-
[解決済み】RazorをJavaScriptで使用する場合
-
[解決済み】ASP.NET RazorのHTML.ActionLinkとUrl.Actionの比較
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み] 2つのリストを結合する
-
[解決済み】2年前のMSDateを把握する【クローズド