Blazor 托管模型 BlazorWebAssembly和Blazor Server

news2024/11/18 7:25:27

BlazorWebAssembly 应用

BlazorWebAssembly 应用使用基于 WebAssembly 的 .NET 运行时在浏览器中直接执行。 BlazorWebAssembly 应用的工作方式类似于 Angular 和 React 等前端 JavaScript 框架。 但不是编写 JavaScript,而是编写 C#。 .NET 运行时与应用、应用程序集和任何必需的依赖项一起下载。 无需浏览器插件和扩展。

下载的程序集是普通的 .NET 程序集,就像在任何其他 .NET 应用中使用的程序集一样。 运行时支持 .NET Standard,因此可将现有的 .NET Standard 用于 BlazorWebAssembly 应用。 但这些程序集仍在浏览器安全沙盒中执行。 某些功能可能会引发 PlatformNotSupportedException,如尝试访问文件系统或打开任意网络连接。

应用加载时,.NET 运行时会启动并指向应用程序集。 应用启动逻辑会运行,并且根组件会呈现。 Blazor 根据组件呈现的输出计算 UI 更新。 然后应用 DOM 更新。
在这里插入图片描述

BlazorWebAssembly 应用完全在客户端运行。 此类应用可以部署到 GitHub 网页或 Azure 静态网站托管等静态网站托管解决方案。 在服务器上根本不需要 .NET。 到应用的某些部分的深层链接通常需要服务器上的路由解决方案。 路由解决方案会将请求重定向到应用的根。 例如,可以通过使用 URL 重写 IIS 中的规则来处理此重定向。

要利用 Blazor 和全栈 .NET Web 开发的所有优势,请使用 ASP.NET Core 托管 BlazorWebAssembly 应用。 通过使用客户端和服务器上的 .NET,你可以轻松共享代码,并使用一组一致的语言、框架和工具生成应用。 Blazor 提供便捷的模板,可用于设置包含 BlazorWebAssembly 应用和 ASP.NET Core 托管项目的解决方案。 生成解决方案后,Blazor 应用中已生成的静态文件由已设置回退路由的 ASP.NET Core 应用托管。

Blazor Server 应用

Blazor 组件会将其输出呈现为名为 RenderTree 的中间抽象。 Blazor 框架然后将呈现的内容与之前呈现的内容相比较。 这些差异会应用到 DOM。 Blazor 组件根据呈现的输出的应用方式进行去耦。 因此组件本身运行的进程无需与更新 UI 的进程相同。 实际上,它们甚至不必在同一计算机上运行。

在 Blazor Server 应用中,组件在服务器上运行,而不是在浏览器中的客户端运行。 浏览器中发生的 UI 事件通过实时连接发送到服务器。 事件被分派到正确的组件实例。 组件将呈现,计算的 UI 差异被序列化后发送到浏览器并在其中应用于 DOM。
在这里插入图片描述

如果你使用过 ASP.NET AJAX 和 Blazor 控件,可能不会对 UpdatePanel Server 托管模型感到陌生。 UpdatePanel 控件负责应用部分页面更新以响应页面上的触发事件。 触发时,UpdatePanel 会请求部分更新,然后应用该更新,无需刷新页面。 UI 状态使用 ViewState 进行管理。 Blazor Server 应用略有不同,因为该应用需要与客户端建立活动连接。 此外,服务器上的所有 UI 状态都需要进行维护。 除了这些差异之外,这两个模型在概念上类似。

Blazor 两种托管模型的优缺点

BlazorWebAssembly 优点:

  1. 没有 .NET 服务器端依赖项。 应用下载到客户端后即可正常运行。
  2. 可充分利用客户端资源和功能。
  3. 工作可从服务器转移到客户端。
  4. 无需 ASP.NET Core Web 服务器即可托管应用。 无服务器部署方案可行(例如通过 CDN 为应用提供服务的方案)。

BlazorWebAssembly 缺点:

  1. 浏览器功能限制了该应用。
  2. 需要客户端硬件和软件支持(例如 WebAssembly 支持)。
  3. 下载项大小较大,应用加载耗时较长。
  4. NET 运行时和工具支持不够完善。 例如,.NET Standard 支持和调试方面存在限制。

Blazor Server 优点:

  1. 下载大小明显小于客户端应用,并且应用的加载速度更快。
  2. 应用可以充分利用服务器功能,包括使用任何与 .NET 兼容的 API。
  3. 服务器上的 .NET 用于运行应用,因此调试等现有 .NET 工具可按预期正常工作。
  4. 支持瘦客户端。 例如,服务器端的应用适用于不支持 WebAssembly 以及资源受约束的设备上的浏览器。
  5. 应用的 .NET/C# 代码库(其中包括应用的组件代码)不适用于客户端。

Blazor Server 缺点:

  1. UI 延迟更高。 每次用户交互都涉及到网络跃点。
  2. 不支持脱机工作。 如果客户端连接失败,应用会停止工作。
  3. 如果具有多名用户,则应用扩缩性存在挑战。 服务器必须管理多个客户端连接并处理客户端状态。
  4. 需要 ASP.NET Core 服务器为应用提供服务。 不支持无服务器部署方案。 例如,无法从 CDN 提供应用。

上述优缺点列表可能会让你顾虑重重,但你可在以后更改托管模型。 无论是否选择 Blazor 托管模型,组件模型都是相同的。 原则上,相同组件可用于任一托管模型。 应用代码不会更改,但最佳做法是引入抽象,使组件与托管模型无关。 抽象使应用能够更轻松地采用不同的托管模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day18_常用API之String类丶Object类

String概述 java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,同时String类提供了很多操作字符串的功能,我们可以直接使用。Java 程序中的所有字符串文字(例如“abc”)都为此类的对象 特点:St…

【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑

【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案) blog.csdn.net/weixin_534033…

最强找茬小程序

文章目录准备工作环境要求安装步骤效果展示源码下载最强找茬小程序,支持好友对战 准备工作 准备一个Linux系统的云服务器 centos7或ubuntu 安装宝塔面板(不是必需的,建议安装这个) 买一个域名,并配置ssl证书&#x…

NX二次开发编译时dll自动数字签名及拷贝

前言 在UG5.0开始,所有基于UG二次开发的DLL都要“签名”后才能被客户端上正版的NX调用。 一、基于C# 开发签名 1、添加资源文件 (1)项目类库上右键–>属性–>资源–>添加资源右边小三角–>添加现有文件–>切换到UG安装目录下…

Java SSM 笔记(一)重置版

Spring核心技术 **前置课程要求:**请各位小伙伴先完成《JavaWeb》篇、《Java 9-17新特性》篇视频教程之后,再来观看此教程。 **建议:**对Java开发还不是很熟悉的同学,最好先花费半个月到一个月时间大量地去编写小项目&#xff0…

Source lnsight工具的简单使用

多文件编程推荐用Source lnsight工具来进行编写 一、Source lnsight工具的简单使用 1、在桌面上新建一个文件夹factory,在文件夹里新建一个cat.c文件和si文件夹 2、打开Source lnsight工具,点击上方Project--->New Project 3、把文件夹factory中si文…

2023年初级会计职称考试《经济法基础》大纲变动内容

整体变动:2023年度考试大纲主要作了以下调整:1. 第四章中增加了增值税出口退税和地方教育附加相关内容;2. 第五章中增加了企业重组业务企业所得税处理,企业所得税特别纳税调整和纳税电报表相关内容;3. 第六章中增加了印花税相关内容。具体变动:第一章 总论无变化第二…

QML矩形(Rectangle)

Rectangle 用于绘制矩形 常见的属性: 填充颜色:纯色:color 渐变 :Gradient类 渐变的优先级大于纯色Gradient(渐变色): 渐变由多种颜色定义,这些颜色将无缝混合&#xff0c…

【前端基础问题】浏览器调起桌面通知功能 Notification

浏览器调起桌面通知功能 Notification一、Notification二、注意事项三、使用步骤1、向用户发起权限请求2、调用 Notification API 进行推送消息四、完整代码五、效果一、Notification Notifications API 允许网页或应用程序在系统级别发送在页面外部显示的通知;这样即使应用程序…

【Servlet+Jsp+Mybatis+Maven】WEB图书馆管理系统

web图书馆管理系统一、绪论二、流程和其页面展示效果流程页面效果项目结构三、具体实现第一步:备数据库表第二步:编写登录前端代码第三步:利用过滤器处理安全问题第四步:控制层去实现相关调用第五步:实现持久化层与数据…

教你如何搭建人事OA-薪资管理系统,demo可分享

1、简介1.1、案例简介本文将介绍,如何搭建人事OA-薪资管理。1.2、应用场景根据设置薪资基础及考勤和绩效的数据计算得到各个员工工资详情。2、设置方法2.1、表单搭建1)新建表单【工资表】,字段设置如下;名称类型名称类型人员资料分…

一款私有化部署的企业级在线文档和知识库

项目介绍基础说明:无忧企业文档是JVS体系下的一款企业协同在线文档,主要服务客群为企业用户,解决企业内部文档编辑、知识沉淀、知识协同等痛点。项目主要采用Java开发,基础框架采用JVS(spring cloudVue)适用…

基于微信小程序的一款小程序版知乎

从零开始开发的一款小程序,所以没有使用任何框架及UI库,记录一下本次开发中踩过的坑吧~展示效果(界面样式设计与交互来自iOS 4.8.0版本知乎App):项目地址:https://download.csdn.net一、开始前的准备申请账号:根据小程…

钉钉配置事件订阅(Python)

钉钉配置事件订阅 0.需求分析 需要实现钉钉企业通讯录同步至企业微信通讯录,这就需要用到钉钉的事件与回调 1.配置应用 登陆开放平台 https://open-dev.dingtalk.com/去企业内部开发里面,先创建个应用,后面都借用这个应用来调接口 创建完…

自定义分库分表组件(实现分库分表的组件)——java

系列文章目录 文章目录系列文章目录前言一、所需技术二、技术总结1. ThreadLocal2.HashMap三、实现1、定义路由注解自定义注解格式要求元注解: 用于描述注解的注解在程序使用(解析)注解:获取注解中定义的属性值小例子:注解定义一个简单的测试…

AI算法创新赛-人车目标检测竞赛总结03

团队简介AI0000032 团队成员均为从事计算机视觉领域的企业员工,热爱技术,勇于挑战,致力于更通用目标检测算法的研究与落地。团队由三人组成,队长何正海 主要负责整体方案设计与模型的量化工作,余洋主要负责模型训练与调…

YOLOV5输出的txt里面有什么猫腻(用于图像分类竞赛中提升图像信息密度)

背景概括: kaggle最近举办了一场医学乳腺癌检测的比赛(图像分类) 比赛官网地址 给的数据是dcm的专业的医学格式,自己通过DICOM库转为png后,发现该图像胸部不同的患者乳腺大小不一,简言之乳腺的CT有效图在…

MySQL性能调优与设计——MySQL中的索引

MySQL中的索引 InnoDB存储引擎支持以下几种常见索引:B树索引、全文索引、哈希索引,其中比较关键的是B树索引。 B树索引 InnoDB中的索引自然也是按照B树来组织的,B树的叶子节点用来存放数据。 聚集索引/聚簇索引 InnoDB中使用了聚集索引&…

LeetCode 141. 环形链表

原题链接 难度:easy\color{Green}{easy}easy 题目描述 给你一个链表的头节点 headheadhead ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 nextnextnext 指针再次到达,则链表中存在环。 为了表示给定链表中的…

python编写webapi读取mdb数据使用json格式响应客户端请求

想做个自动应答机器人,通过webapi提供服务,原理:判断关键字,到数据库查询相关内容,以json格式反馈给客户端。 1、创建autoreply数据库,创建reply表,表中包含kename(短文本&#xff…