最近在研究Blazor框架,做了些Demo,感觉到了它强大之处,真的不弱于任何JS框架。
首先C#的语言特性,相比JS不知高出多少,而JS要大一点的项目,必然少不了webpack之类的工具,看着都头痛,实在不想接触。说实话,webpack之类的工具应该是JS语言自身的缺点才产生这样的工具,其他的任何一个语言,需要这种打包工具吗?
用Blazor框架,必须用webassembly才有意义,而Blazor Server是依赖 SignalR与服务端进行通信,逻辑脚本还是运行于服务端,并更新DOM。通过webassembly,Blazor可以把整个.NET都带到了浏览器上。
先看一个实例,图片上传前处理,不借助后端,直接在浏览器上处理,实例通过nuget引用了SixLabors.ImageSharp图像处理工具,.NET版本为5.0,如果是3.0则没有组件,通过这个组件我们可以处理本地文件。
@page “/UseFile”
@using SixLabors.ImageSharp
@using SixLabors.ImageSharp.Processing
@Message @code { private bool ImageLoaded { get; set; } public string Message { get; set; } public string ImgDataUrl { get; set; } public async Task FileChange(InputFileChangeEventArgs evn) { try { //加载图片内容 var sFile = evn.File.OpenReadStream(1024 * 1024 * 5); //5M限制 var msInput = new System.IO.MemoryStream(); await sFile.CopyToAsync(msInput);
var img = SixLabors.ImageSharp.Image.Load(msInput.ToArray());
img.Mutate((p) => { p.Resize(200, 200); }); //调整大小
var fmt = SixLabors.ImageSharp.Formats.Jpeg.JpegFormat.Instance;
ImgDataUrl = img.ToBase64String(fmt); //data:application/octet-stream;base64, ....
ImageLoaded = true;
Message = "图片已处理";
StateHasChanged();
}
catch (Exception err)
{
this.Message = err.Message;
}
}
现在我们真的完全的,仅在浏览器上处理了图像,不发送任何请求到后端。我们看到,实现这一过程,我们需要从nuget上引入SixLabors.ImageSharp并使用它就行了。nuget上还有多少东西可以用,不用我说了吧。
第二个例子,Excel导出,同样在nuget上引用Epplus:
@page “/exportdata”
这是标准的.xlsx文件,可不是csv之类的简单内容输出,完全在浏览器上运行,没有发出任何后端请求。同样,只需在nuget上引入一个东西,然后使用就行了。这些东西通常来说,我们都只能在服务器上运行的,但通过Webassembly和blazor,我们把它们直接搬到浏览器里来了。非常令人兴奋的事情。不可否认,让JS来做这些事情当然也行,但远不如.NET来得舒服。
Blazor真的为前端打开了一个.NET世界的大门。只是,现在还只是刚开始,很多网站监控人还没有意识到.NET能给我们带来的东西。加上前端JS的生态目前已经非常丰富,加上很多人对.NET技术一直带着歧视的眼光,Blazor要进入前端站稳脚跟,还要走很长的路。我相信,Blazor要火起来的话,就没JS什么事了。



