热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#程序员的福音来啦,Blazor框架概览

其实这篇文章算是迟到了很长时间了,不过现在写出来还不算太晚。.NETCore3.0已经出来一段时间了,随.NETCore3.0出来的,还有

其实这篇文章算是迟到了很长时间了,不过现在写出来还不算太晚。.NET Core 3.0已经出来一段时间了,随.NET Core 3.0出来的,还有一个名为Blazor的框架。今天我试用了一下,感觉很有意思。这个框架的潜力很大,而且因为基于.NET技术,对于C#程序员来说学习门槛很低,开发效率高的一笔。所以来给大家介绍一下。

blazor

官方介绍

首先来看看官方对于blazor框架的一些介绍:

Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架:

  • 使用 C# 代替 Javascript 来创建丰富的交互式 UI。
  • 共享使用 .NET 编写的服务器端和客户端应用逻辑。
  • 将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。

使用 .NET 进行客户端 Web 开发可提供以下优势:

  • 使用 C# 代替 Javascript 来编写代码。
  • 利用现有的 .NET 库生态系统。
  • 在服务器和客户端之间共享应用逻辑。
  • 受益于 .NET 的性能、可靠性和安全性。
  • 始终高效支持 Windows、Linux 和 macOS 上的 Visual Studio。
  • 以一组稳定、功能丰富且易用的通用语言、框架和工具为基础来进行生成。

简单来说,Blazor是一个开发客户端网页程序的框架。需要注意,根据官网的说明,如果你要开发网站类型的应用,还是应该用ASP.NET Core等框架。Blazor比较适合传统企业,在内网中运行,用户数量不多,基于浏览器的应用。

目前Blazor有两个版本,Server版本利用HTML、CSS等网页技术,项目运行的时候需要连接服务器。官网也就介绍了Server版的优缺点。

Blazor 服务器托管模型具有以下几个优点:

  • 下载大小明显小于 Blazor WebAssembly 应用,且应用加载速度快得多。
  • 应用充分利用服务器功能,包括使用任何与 .NET Core 兼容的 Api。
  • 服务器上的 .NET Core 用于运行应用程序,因此现有的 .NET 工具(如调试)可按预期方式工作。
  • 支持瘦客户端。 例如,Blazor 服务器应用程序适用于不支持 WebAssembly 的浏览器以及资源受限设备上的浏览器。
  • 应用程序的 .NET/C#代码库(包括应用程序的组件代码)不会提供给客户端。

Blazor 服务器托管有缺点:

  • 通常存在较高的延迟。 每个用户交互都涉及网络跃点。
  • 无脱机支持。 如果客户端连接失败,应用将停止工作。
  • 对于包含多个用户的应用而言,可伸缩性非常困难。 服务器必须管理多个客户端连接并处理客户端状态。
  • 为应用提供服务需要 ASP.NET Core 服务器。 不可能的无服务器部署方案(例如,通过 CDN 为应用提供服务)。

Blazor的另一个版本基于WebAssembly技术,可以支持离线运行,而且借由WebAssembly的计算高性能特性,可以在浏览器中运行的更高效。官网也介绍了其优缺点。不过WebAssembly版目前还在测试当中,正式版将随.NET Core 3.1一起推出。

Blazor WebAssembly 托管模型具有以下几个优点:

  • 没有 .NET 服务器端依赖项。 应用在下载到客户端之后完全正常运行。
  • 完全利用客户端资源和功能。
  • 工作从服务器卸载到客户端。
    – 不需要 ASP.NET Core web 服务器来托管应用程序。 无服务器部署方案可能(例如,通过 CDN 提供应用)。-

B- lazor WebAssembly 托管有缺点:-

  • 应用程序限制为浏览器的功能。-
  • 需要支持的客户端硬件和软件(例如,WebAssembly 支持)。
  • 下载大小较大,应用需要较长时间才能加载。
  • .NET 运行时和工具支持不太成熟。 例如, .NET Standard支持和调试中存在限制。


Blazor示例项目

好了,不多说废话了,让我们直接来看看Blazor项目是什么样子的吧,这里以Blazor Server为例。它也是.NET Core项目,所以集成了.NET Core的所有好处,可以跨平台,各种IDE和编辑器都支持。这里以Visual Studio为例来说明,当然你也可以使用Visual Studio Code等编辑器。

首先用VS创建一个Blazor项目,项目配置如图所示。稍等片刻,项目就创建好了。

创建Blazor应用

然后用调试功能,即可运行程序。程序运行结果如图所示。

运行结果

好了,让我们来看看项目代码吧。

首先来看看项目节奏,一个标准的ASP.NET Core 项目。wwwroot目录存放项目用到的CSS、JS等文件;Data目录存放数据库相关的代码;Pages目录存放项目页面对应的Razor模板代码;Shared目录存放项目页面的公共模板。

项目结构

主页

主页对应的代码很简单,如下所示。page指令指定了本页面对应的URL。

&#64;page "/"<h1>Hello, world!h1>Welcome to your new app.

计数器

第二个页面的功能是计数器&#xff0c;功能很简单&#xff0c;点击页面上的按钮&#xff0c;计数器数字加一。

计数器页面

对应的代码如下。需要注意的是这里onclick后面的不是通常意义的JS函数&#xff0c;而是code指令里面的C#函数。相信对于C#程序员来说&#xff0c;这样来编写页面确实更简单方便。

&#64;page "/counter"<h1>Counterh1><p>Current count: &#64;currentCountp><button class&#61;"btn btn-primary" &#64;onclick&#61;"IncrementCount">Click mebutton>&#64;code {int currentCount &#61; 0;void IncrementCount(){currentCount&#43;&#43;;}
}

异步加载

最后一个功能很有意思&#xff0c;利用C#的异步功能实现了页面异步加载数据的功能。当切换到这个页面的时候&#xff0c;默认显示加载中&#xff0c;当数据加载完毕的时候&#xff0c;切换显示出数据表格。

异步加载

这个页面对应的功能如下。可以看到完成异步功能的代码很简单&#xff0c;就是一个C#异步方法。然后页面里用if-else指令来切换数据显示&#xff0c;当获取到数据之后就显示。

&#64;page "/fetchdata"&#64;using BlazorApp1.Data
&#64;inject WeatherForecastService ForecastService

Weather forecast

This component demonstrates fetching data from a service.

&#64;if (forecasts &#61;&#61; null)
{

Loading...


}
else
{&#64;foreach (var forecast in forecasts){}
DateTemp. (C)Temp. (F)Summary
&#64;forecast.Date.ToShortDateString()&#64;forecast.TemperatureC&#64;forecast.TemperatureF&#64;forecast.Summary

}&#64;code {WeatherForecast[] forecasts;protected override async Task OnInitializedAsync(){forecasts &#61; await ForecastService.GetForecastAsync(DateTime.Now);}
}

那么这个ForecastService类是何方神圣呢&#xff1f;我们再来看看它的实现代码。代码实现实际上也很简单&#xff0c;就是利用LINQ功能产生了一组随机数据。

using System;
using System.Linq;
using System.Threading.Tasks;namespace BlazorApp1.Data
{public class WeatherForecastService{private static readonly string[] Summaries &#61; new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};public Task GetForecastAsync(DateTime startDate){var rng &#61; new Random();return Task.FromResult(Enumerable.Range(1, 5).Select(index &#61;> new WeatherForecast{Date &#61; startDate.AddDays(index),TemperatureC &#61; rng.Next(-20, 55),Summary &#61; Summaries[rng.Next(Summaries.Length)]}).ToArray());}}
}

可以看到利用Blazor框架来实现页面异步加载这个功能&#xff0c;对于.NET程序员来说很简单。假如利用React、Vue等前端技术来实现的话&#xff0c;需要学习大量额外的知识。这也正是Blazor框架的目的所在&#xff0c;让C#程序员更加方便的实现同样的功能。

将来Blazor WebAssembly还会提供离线Web程序的功能&#xff0c;为.NET程序员们带来更多功能。这些年来.NET Core开源的成果大家有目共睹&#xff0c;可以期待未来.NET编程领域出现更多优质框架&#xff0c;让程序员们能享受到更美好的生活。


推荐阅读
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
author-avatar
mobiledu2502926333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有