Blazor vs Razor

ben*_*age 31 c# razor asp.net-core blazor

随着Blazor的发明,我想知道这两种语言之间是否有显着的效率(代码的创建和代码的实际编译/执行)?

https://github.com/SteveSanderson/Blazor

如果有人真正实现了它,你是否已经进行了任何性能测试,或者与普通的Razor相比,是否有轶事(是的,抱歉,我要求此道歉)对代码编写过程的反馈?

Fel*_*ipe 45

我在下面提供的信息主要是从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; }
}
Run Code Online (Sandbox Code Playgroud)

这会在html标记中创建一个可重用的组件:

<MyDialog Title="Ski Lift controls" onOK="DismissSkiDialog">
    Gondola @gondolaId is now <em>running</em>
</MyDialog>
Run Code Online (Sandbox Code Playgroud)

执行

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");
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 在示例中,您应该使用“代码”,而不是“函数”。 (2认同)

Maj*_*vin 18

简而言之:

\n

Razor是流行的模板标记语法.NETBlazor(浏览器 + Razor)是一个.NET-basedWeb 框架,可以使用 SignalR 在客户端上运行WebAssembly,也可以通过 SignalR 在服务器上运行。

\n

举个例子,Razor您在使用 创建 Web 应用程序时使用的语法ASP.NET,您\xe2\x80\x99 之前可能已经见过:

\n
<h1>\n  Hello @Model.Username\n</h1> \n
Run Code Online (Sandbox Code Playgroud)\n

razor 负责HTML根据模型中的数据进行渲染,同时还支持各种条件和循环。

\n

另一方面,Blazor 是一种与ASP.NET Core&类似的技术ASP.NET MVC

\n

它为 Web 应用程序提供支持。它使用 Razor 作为创建 UI 的模板语法。一个常见的误解是 Blazor 使用 Razor。另外两个类似的术语 \xe2\x80\x93 Blazor 组件和 Razor 组件进一步加剧了这种情况。它们被广泛互换使用,但正确的术语是 Razor Component。组件是单个 Razor 文件(扩展名为 .cshtml)中标记(用 HTML 编写)和逻辑(用 C# 编写)的组合。

\n

您可以在这里找到更多信息。

\n