随着 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 执行的深入比较,请参阅 this post。
SPA建筑与设计
由于已经有针对 Web 的 JavaScript 构建了出色的框架,Blazor 受到了 React、Vue 和 Angular 等现代框架中已使用的想法的启发,并将在帖子中详细介绍概念,例如:
请注意,虽然这些概念存在于 Razor 的服务器端,但并非所有概念都存在于客户端。前端路由在 Razor 中不可用,并且通常与 JavaScript 框架结合起来来填补该场景。
我个人曾开发过与 AngularJs 一起提供 Razor 页面的企业应用程序。它有时会变得混乱,并且永远不会感觉“干净”。
总结
Razor 是基于服务器架构的解决方案,可以处理 api 逻辑和服务器端模板,但它无法提供 javascript 之外的客户端逻辑。
Blazor 是下一步(希望是后继者),它将允许与 Razor 相同的服务器端功能,但将使用
C#
而不是 javascript 集成客户端逻辑。
我目前正在使用 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
是您在使用ASP.NET
创建网络应用程序时使用的语法,您之前可能已经见过:
<h1>
Hello @Model.Username
</h1>
剃刀负责根据模型中的数据渲染您的
HTML
,同时还支持各种条件和循环。
另一方面,Blazor 是一种与
ASP.NET Core
和 ASP.NET MVC
类似的技术,因为:
它为 Web 应用程序提供动力它使用 Razor 作为创建 UI 的模板语法。一个常见的误解是 Blazor 使用 Razor。另外两个类似的术语(Blazor 组件和 Razor 组件)进一步加剧了这种情况。它们被广泛互换使用,但正确的术语是 Razor Component。组件是单个 Razor 文件(扩展名为 .cshtml)中标记(用 HTML 编写)和逻辑(用 C# 编写)的组合。
您可以在此处找到更多信息。
您可以将 Blazor 称为具有额外功能的 Razor 组件! Razor 系列的其他变体是 Razor 视图和 Razor 页面。 ASP.NET 将它们全部合并在一起,您可以在一个项目中拥有并使用它们。它们只是 ASP.NET Core 中的服务,您可以只注册或注入您想要的东西,这是 ASP.NET 的一个非常好的功能。检查 eShopOnWeb 参考应用程序。 网上网上商店