76

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

https://github.com/SteveSanderson/Blazor

如果有人实际实现了它,与普通的旧 Razor 相比,您是否进行了任何性能测试,或者有关于代码编写过程的轶事(是的,抱歉,抱歉,我要求这样做)反馈?

4

3 回答 3

91

我在下面提供的信息主要是从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 加载器直接执行的字节码。例如,在 javascript 中,.js需要先加载文件并将单独的文件合并,然后解析和标记化并构建成树结构,然后可以由浏览器的 javascript 引擎(例如chrome 的 v8 引擎)解释。

有关 webAssembly 和 javascript 执行的深入比较,请参阅这篇文章

SPA建筑与设计

由于已经为 web 构建了很棒的 javascript 框架,Blazor 受到了 React、Vue 和 Angular 等现代框架中已经使用的想法的启发,并且将在帖子中详细介绍一些概念,例如:

  • 布局
  • 路由
  • 依赖注入
  • 延迟加载
  • 单元测试

请注意,虽然 Razor 中的服务器端存在这些概念,但并非所有概念都存在于客户端。前端路由在 Razor 中不可用,并且经常与 javascript 框架结合以填充该场景。

我个人曾与 AngularJs 一起开发过为 Razor 页面提供服务的企业应用程序。它有时会变得凌乱,而且从未感觉“干净”。

总之

Razor 是一种基于服务器架构的解决方案,它可以处理 api 逻辑和服务器端模板,但它不能提供 javascript 之外的客户端逻辑。

Blazor 是下一步(希望是继任者),它将允许与 Razor 相同的服务器端功能,但将使用C#而不是 javascript 集成客户端逻辑。

我目前正在使用 Blazor 进行小型测试项目,到目前为止,我发现它易于使用。但正如博客和 GitHub 页面上的警告所示,它甚至还没有接近生产就绪。

第 3 方编辑自 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");
        }
     }
}
于 2018-02-12T17:47:27.703 回答
5

简而言之:

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

举个例子,Razor你在创建 web 应用程序时使用的语法ASP.NET,你可能以前见过:

<h1>
  Hello @Model.Username
</h1> 

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

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

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

您可以在此处找到更多信息。

于 2021-07-15T08:49:22.250 回答
0

您可以将 Blazor 称为具有额外功能的 Razor 组件!Razor 系列的其他变体是 Razor 视图和 Razor 页面。ASP.NET 将它们全部合并在一起,您可以在一个项目中拥有并使用它们。它们只是 ASP.NET Core 中的服务,你可以只注册或注入你想要的东西,这是 ASP.NET 的一个非常好的特性。检查 eShopOnWeb 参考应用程序。 eShopOnWeb

于 2022-02-19T12:14:21.110 回答