Angular 16+ 高级教程 – Angular 和其它技术方案的比较
前言
上一篇我有提到 Angular 适合用于哪些项目,但讲的太含糊,什么大中小项目的...这篇我将更具体的去讲解,Angular 的定位,还有它和其它方案的优缺点。
Web 技术可以用来做许许多多不同种类的项目。这里我抽出 4 种最常见的,并且拿几种不同的方案来看看各自的优缺点。
企业网站
企业网站相对其它类型是最简单也是最早的 Web 技术应用。
它的主要功能是呈现企业的信息,如:产品、服务、公司规模、人员等等,访客如果对企业有兴趣,就填表格提交,等待企业回复,very simple,没有复杂的交互。
虽然简单,但如果我们只是单纯使用 HTML、CSS、JS,那可不一定能完成所有的功能,而且即便可以完成大部分功能,代码也不容易维护。
技术难题和解决方案
难题一:Duplicated HTML
比如,我们要显示企业的所有分行信息。它是一个 list + card 的设计。这时我们会发现每一张 card 的 HTML 都是重复的。只有中间的一些信息不同而已。
这就是 duplicated HTML。解决方案就是使用 template engine. 比如 ASP.NECT Core 的 Razor Pages
难题二:Duplicated Page
/products/product-a.html
/products/product-b.html
a 和 b 产品设计都是一样的,只是图片,名字,价钱不同而已。这就叫 duplicate page.
解决方案就是使用 router。比如 ASP.NECT Core 的 Razor Pages
难题三:数据库
template engine 不仅解决了 duplicated HTML 问题,它也顺带把设计和数据分开了。这对管理是加分了。
我们再进一步思考,是否要把数据和代码也分开管理呢?显然这也是加分的。解决方案是 SQL Server + EF Core
难题四:Handle HTTP POST
表单提交的解决方案是 ASP.NET Core Web API
难题五:游览器兼容和不友好的 DOM API
这个是以前的问题,目前的游览器已经没有太多兼容问题了,而且 DOM API 也完善了很多。以前的解决方案是用 jQuery.
难题六:交互功能
企业网站主要功能是游览,由于信息多,空间少,所以在设计上会先做一些隐藏,然后通过交互来呈现。
比如:Slideshow、Modal Images。这些插件一般都是用 vanilla JS 来完成。
其它解决方案
Template Engine – ASP.NET Core Razor Pages
Router – ASP.NET Core Razor Pages
Database – SQL Server + EF Core
HTTP Post – ASP.NET Core Web API
交互体验 – Vanilla JS
除了 Vanilla JS 以外,其余的都是后端技术。ASP.NET Core 只是其中一种,你可以把它换成 PHP, Java 等等其它语言框架,其解决方式都大同小异。
这套方案我们给它个名字叫 backend + frontend
它的优点是,职责分配的好。缺点是双语言。一个开发人员要掌握 2 套技术会有点吃力。
所以近年来,随着 Node.js 越来越普及。出现了单语言方案。我们可以叫它 frontend + frontend.
Template Engine – React
Router – Next.js
Database – MySql + Prisma
HTTP Post – Express.js
交互体验 – React
这个技术方案的特点有 2 个,第一个是单语言,第二个是用 React 写交互体验会比 Vaniila JS 更好开发和管理。
我目前没有看到这个方案有哪些缺陷,可能唯一的缺陷是还不够成熟,正真用起来可能会发现还不如 ASP.NET Core 和 PHP 开发体验好。
虽然方案是好,但是我觉得针对企业网站领域很难有市场。因为企业网站更多的是用 Web Builder (Webflow、WordPress) 来开发的。除非有人先做一个基于 React + Next.js 的 Web Builder。
后台管理系统
上面我们提到,数据和代码是分离的,这也意味着我们可以在不修改代码的情况下修改网站内容,比如产品的价格。
直接修改数据库对程序员来说很容易,但这个难度太小,所以更好的方式是再往前一步,做一个网站内容管理系统 (CMS),这样普通员工就可以修改网站内容了。
若我们依然采用 backend + frontend 方案来实现这个系统,我们会遇到一个问题。
难题一:动态 HTML 内容
管理系统有一个常见的交互体验 – 添加数据。用户填写表格,提交,页面的内容发生变化。
在 backend + fronend 方案中,template engine 是由 backend 技术实现的,这意味着当用户添加新数据后,要嘛 reload page 让后端重新渲染新页面,要嘛通过 Web API 返回局部的 HTML,前端用 DOM API 做插入修改页面。
这两个方案都有缺陷,reload page 体验差,ajax + response HTML + append 代码繁琐。
解决方案
既然问题出在渲染,那就把渲染让前端负责呗。Angular、React 都可以替代后端的 template engine 技术。
另外 Angular 也可以替代后端的 Router 技术。
至此后端技术就只负责 Web API 输出数据就好。其它的都让前端负责。
这个就是经典的前后端分离方案。Angular 就超级适合这个方案。你看看 Gmail、Google Ads、Google Analytics、Google Cloud Console 等等,
哪一个不是这类的管理系统?
这套方案有 3 个弱点
1. 双语言。这个是老问题了。
如果想单语言,也可以考虑 Blazor。
2. SEO 差。因为把渲染搬到前端负责了,而有些爬虫是不运行 JS 的。
但巧的是,管理系统不需要 SEO,所以无感。
3. 首屏渲染慢,也是因为渲染搬到前端的关系,首屏渲染变慢了。不过巧的是,管理页面一般不关心首屏渲染速度。
难题二:JS 多了需要被管理
我们加重前端的职责,可能导致 JS 变得复杂。这时就需要引入 TypeScript、Sass、Webpack 等等工具。幸好 Angular 已经 build-in 了。
如果用 React 则需要在社区找到对应的方案。
总结
管理页面目前是 Angular 的最佳使用场景。Google 自己也是这样用的。
电子商务网站
企业网站做大以后通常会晋升成为电子商务网站。不管是卖产品,还是预约服务,都可以称为电子商务。
电商网站比起企业网站多了一些交互,比如 add to cart。
不要小看这一个 add to cart。它可是动态 HTML 内容哦。也就是说,我们会遇到和管理页面一样的难题。
那我们可以用同样的前后端分离方案来解决吗?Angular + Web API?
很遗憾,上面我们提到了这个方案有几个弱点。
1. SEO 问题,要解决这个问题就必须在服务端渲染。哪怕你用的是前端技术做 template engine。
ASP.NET Core 可以启动 Node.js 并且使用 Angular server side render 来完成这个任务。只是这个方案不是很热门。所以正真操作时很可能会遇到很多鬼问题。
2. 首屏渲染慢,Angular 也有一些技术是针对首屏渲染的。
显然,目前 Angular 用于电商还不是很稳定。可能 React + Next.js 会更理想。但是不管怎么样,我觉得大部分电子商务网站并没有那么复杂。
我们可以退回到企业网站 backend + frontend 的方法。它的缺陷只是在 ajax + response HTML + append 代码非常烂而已,只要不要太多那么还是可以接受的。
应用程序
比如 e-learning system,老师学生线上教课。学习做题等等。这样的系统就是应用程序。
显然它比电子商务复杂 (交互多),比管理系统稍微简单一些。这类项目也蛮适合前后端分离方案。
同样的,它们对 SEO 和 首屏渲染速度不那么重要。
总结
我的选择
企业网站
我个人觉得用 ASP.NET Core + JS 就够了.
你可以配上 Webpack / Vite、TypeScript、Sass、RxJS 等等相关技术。但核心就是让后端技术负责 template engine。
如果要单语言,可以考虑 React + Next.js
后台管理系统
Angular 的最佳战场,如果要单语言则可以考虑 Blazor。
电子商务网站
我个人会选择 React + Next.js 方案,或者 ASP.NET Core + JS。其次才会考虑 Blazor 或 Angular。
应用程序
我个人会选 React + React Native,大于 Angular + Native Script,最后是 Blazor。
我的感想
上面几种类型的项目,笼统的看都是交互页面。只是大家注重的点不一样。而且很多技术其实是重叠的,
它们只是语言不一样,实现手法不一样而已。
每个技术都想占领市场,都想让更多开发者使用。
像 Blazor 想吃 Angular / React 管理系统的蛋糕,React 结合 Next.js 想吃 ASP.NET Core / PHP 企业网站的蛋糕。
React Native / Angular Native Script 想吃 IOS / Android 的蛋糕。
Angular server side render 想吃电商网站的蛋糕。
每种技术的起点都不一样,但都慢慢去吃其它人的蛋糕。对于只会 C# 的人来说,Blazor 是个好东西。因为随着它的成长你的能力也在提升。
但对于会 C# 也会 JS 的人来说。用 C# 去搞 JS 的东西反而会让 C# 变得很奇怪。倒不如分开 2 种技术去实现。
同样的,IOS 和 Android 本来是 2 套技术,但为了让开发者少学一点,搞出了 Flutter,Native Script,Ionic。
这到底是好还是不好呢?我也说不上。
Angular 16+ 高级教程 – Angular 和其它技术方案的比较的更多相关文章
- NgRx/Store 4 + Angular 5使用教程
这篇文章将会示范如何使用NgRx/Store 4和Angular5.@ngrx/store是基于RxJS的状态管理库,其灵感来源于Redux.在NgRx中,状态是由一个包含action和reducer ...
- Angular CLI 使用教程指南参考
Angular CLI 使用教程指南参考 Angular CLI 现在虽然可以正常使用但仍然处于测试阶段. Angular CLI 依赖 Node 4 和 NPM 3 或更高版本. 安装 要安装Ang ...
- angular.js高级程序设计书本开头配置环境出错,谁能给解答一下
server.jsvar connect=require('connect');serveStatic=require('serve-static');var app=connect();app.us ...
- Pandas之:Pandas高级教程以铁达尼号真实数据为例
Pandas之:Pandas高级教程以铁达尼号真实数据为例 目录 简介 读写文件 DF的选择 选择列数据 选择行数据 同时选择行和列 使用plots作图 使用现有的列创建新的列 进行统计 DF重组 简 ...
- 【读书笔记】.Net并行编程高级教程(二)-- 任务并行
前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...
- 分享25个新鲜出炉的 Photoshop 高级教程
网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果.这 ...
- Siki_Unity_2-9_C#高级教程(未完)
Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...
- 这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理。
这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理. 01-java高级架构师设计-基础深入 J2SE深入讲解 Java多 ...
- ios cocopods 安装使用及高级教程
CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...
- 【读书笔记】.Net并行编程高级教程--Parallel
一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...
随机推荐
- apache ab.exe压力测试
ab.exe是一个性能检测工具,是apache server中的一个小组件,使用简单,方便 下载地址:http://files.cnblogs.com/files/gossip/ab.zip ...
- 判断浏览器是否是 IE 及 IE8 以下版本
作为一个前端,避免不了会遇见IE的坑,其他浏览器都好好的,测到IE就完蛋,各种不支持,服气了 有些属性和方法是所有版本IE都不支持,而有些则是部分支持,在项目中能够,主要分界岭为IE8,我相信目前大部 ...
- 产品探秘:智影AI——你的创意视频制作神器!
只需3步,把小说变成视频.免费试用,首次注册赠送600积分. https://icomicai.com/ 在这个快节奏的时代,创意与效率并重成为了我们追求的新风尚.今天,就让我带你一起揭秘一款颠覆传统 ...
- SQL Server 帐号权限管理及C#编程应用(图解)
昨晚在群里讲解这部分内容,因为好久没操作过了,差点翻车...今天把它整理一下发出来,方便没听明白的小伙伴学习和理解. 我们平时学习数据库时,要么使用sa帐号,要么用windows默认帐号登录,总之都拥 ...
- GUN/Linux 基础教程
GUN/Linux 基础教程 控制台 shell 超级用户 root 辅助管理 CLI 软件 文件基础 目录 链接 设备文件 控制台 shell 在启动 Linux 系统后,如果没有安装 GUI 的话 ...
- Python 按规则解析字符串中的嵌套函数并实现函数调用
按规则解析字符串中的嵌套函数并实现函数调用 需求 1.按照一定规则解析字符串中的函数表达式,并替换这些表达式.这些函数表达式可能包含其它函数表达式,即支持函数嵌套 2.函数表达式格式:${ __函数名 ...
- .NET 中高效 Excel 解决方案 MiniExcel
前言 MiniExcel 是一个用于 .NET 平台的轻量级.高性能的库,专注于提供简单易用的 API 来处理 Excel 文件.以下是 MiniExcel 的特点总结: 轻量级与高效:MiniExc ...
- 全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现
全网最适合入门的面向对象编程教程:27 类和对象的 Python 实现-Python 中异常层级与自定义异常类的实现 摘要: 本文主要介绍了在使用 Python 进行面向对象编程时,异常的层级和如何使 ...
- Jmeter函数助手28-urldecode
urldecode函数用于解码application/x-www-form-urlencoded字符串. String to encode in URL encoded chars:填入applica ...
- 【YAML】非标记语言的标记语言
什么是YAML? YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写. 在开发的这种语言时,YAML 的意思其实是:&qu ...