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