有了 Blazor 的发明,我正在想知道这两种语言在代码创建、代码的实际编译/执行方面是否存在显著的效率差异?
https://github.com/SteveSanderson/Blazor
如果有人已经实施过它,您是否进行了任何性能测试,或者在与普通 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加载器直接执行。例如,在javascript中,需要首先加载.js
文件并组合不同的文件,然后解析和标记,并构建成树结构,最后可以被浏览器的javascript引擎(例如chrome的v8引擎)解释。
有关WebAssembly和javascript执行的深入比较,请参见此文章。
SPA体系结构和设计
由于已经有了伟大的用于Web的javascript框架,Blazor已受到现代框架(如React、Vue和Angular)中已使用的思想的启发,并将包括在该文章中详细介绍的概念:
请注意,虽然在Razor中这些概念存在于服务器端,但并非所有这些概念都存在于客户端。前端路由在Razor中不可用,通常与javascript框架结合使用以填充该场景。
我个人曾在服务于Razor页面和AngularJs的企业应用程序上工作过。有时可能会变得混乱,并且永远不会感觉“干净”。
总结
Razor是用于服务器端架构的解决方案,可以处理API逻辑和服务器端模板化,但无法在JavaScript之外提供客户端逻辑。
Blazor是下一步(并希望成为Razor的继承者),将允许使用C#集成客户端逻辑,实现与Razor相同的服务器端功能。
我目前正在使用Blazor进行小型测试项目,并且到目前为止我发现它很容易使用。但是,博客和GitHub页面上的警告表明,它还远未准备好面向生产。
在.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");
}
}
}
简而言之:
Razor
是一种流行的.NET
模板标记语法。 Blazor
(浏览器+ Razor)是一个基于.NET
的Web框架,可以通过WebAssembly
在客户端上运行,也可以通过SignalR在服务器上运行。
举个例子,当你用ASP.NET
创建Web应用程序时,你会使用Razor
语法,这可能是你以前见过的:
<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# 编写)的内容。
您可以在此处找到更多信息。