Blazor vs Razor

asp.net-core blazor c# razor

隨著Blazor的發明,我想知道這兩種語言之間是否有顯著的效率(代碼的創建和代碼的實際編譯/執行)?

https://github.com/SteveSanderson/Blazor

如果有人真正實現了它,你是否已經進行了任何性能測試,或者與普通的Razor相比,是否有軼事(是的,抱歉,道歉,我要求這樣做)對代碼編寫過程的反饋?

一般承認的答案

我在下面提供的信息主要是從Steven Anderson的2月2日博客文章和我自己對該項目目標的理解中解釋的:

Blazor旨在將當前.NET Razor堆棧的創意與現代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很快。它編譯為由瀏覽器的wasm loader直接執行的字節碼。例如,在javascript中,需要首先加載.js文件,然後組合單獨的文件,然後解析並標記化並構建到樹結構中,然後可以通過瀏覽器的javascript引擎(例如chrome的v8引擎 )進行解釋。 。

有關webAssembly和javascript執行的深入比較,請參閱此文章

SPA建築與設計

由於已經在網絡javascript中構建了很好的框架,Blazor受到了現代框架(如React,Vue和Angular)中已經使用的思想的啟發,並將在帖子中詳細介紹概念,例如:

  • 佈局
  • 路由
  • 依賴注入
  • 延遲加載
  • 單元測試

請注意,雖然Razor中服務器端存在這些概念,但並非所有這些概念都存在於客戶端。 Razor中沒有前端路由,並且經常與javascript框架結合以填充該場景。

我個人致力於與AngularJs一起為Razor頁面提供服務的企業應用程序。它有時會變得混亂,從來沒有感覺到“乾淨”。

綜上所述

Razor是基於服務器的架構的解決方案,可以處理api邏輯和服務器端模板,但它不能提供javascript之外的客戶端邏輯。

Blazor是下一步(希望繼任者),它將允許與Razor相同的服務器端功能,但將使用C#而不是javascript集成客戶端邏輯。

我目前正在與Blazor一起開展小型測試項目,到目前為止,我發現它很容易使用。但正如博客和GitHub頁面上的警告所說,它甚至還沒有接近生產準備就緒。

第三方編輯從2018-09-26

在.NET Conf 2018中,宣布Razor組件(“服務器端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");
        }
     }
}


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow