前端服务端
特指服务于前端开发的服务端, 不包含数据库, 中间件, 分布式服务, K8S等底层设施
引入服务端的必要性
在传统前端开发中, 所有的代码和功能都运行在客户端.
随着业务体量增大, 比如需要传输到客户端的脚本体积越来越大, 导致传输延迟上涨, 渲染性能下降; 前端要调用的接口越来越多,导致客户端白屏时间越来越长, 服务端性能下降
在服务端渲染页面能有效减少传输量, 缩短白屏时间; 在服务端聚合接口, 能消除客户端频繁的接口调用; 在服务端也能很任意的配置安全策略和持久化日志等等
运行时
JS运行时是JS代码的执行环境, 包含JS引擎, JS标准库以及一组环境相关的API. 而Node.js就是一种运行时, 它赋予了JS语言在服务端执行的能力.
Node.js是最流行最稳定, 应用范围最广的服务端运行时, 它为上层应用提供了诸如HTTP协议实现, 文件系统, 查询字符串处理等服务端开发必备的基础API
除了Node.js, 还有Deno和Bun, 它们各有优缺点, 体现在性能, 安全性和社区生态中
基础框架
对运行时进行一层封装就形成了基础框架, 常见的: Express, Koa, Fastify, 它们在Node.js之上添加了额外功能, 专门用于构建Web服务
以Express为例, 基础框架通常会维护一个应用对象, 代表一个Web服务器, 接收来自某个端口上的所有HTTP请求,
然后对HTTP协议进行抽象, 提供请求和响应两大对象, 最后提供路由简化不同请求的处理方式.
基础框架可以应付大多数简单的业务场景, 比如完成简单的数据处理, 或者搭建一个简易的代理服务器.
应用框架
应用框架是对基础框架的进一步封装, 常见的: NestJS, Egg.js, Sails.js, krakenjs等等.应用框架会提供更多更复杂的功能.
以NestJS为例, 它抽象了模块, 控制器, 服务等概念, 同时添加了诸如验证, 缓存, 队列, 日志, 会话等通用功能,
这些功能大大增强了应用框架对复杂业务的适用性
还有一类特别的框架, 融合了前端应用框架和服务端框架, 形成了所谓的全栈框架, 比如Next.js
相比纯服务端应用框架, 它更简洁, 更贴合前端的渲染需求. 服务端渲染(SSR) 更多是内置于这样的全栈框架之中
应用架构
MVC
- 模型: 定义数据结构
- 视图: 负责展示数据
- 控制器: 负责处理用户输入和业务逻辑
RESTful
通过HTTP协议GET, POST, PUT, DELETE等方法的语义来操作资源, 以资源和动作为核心, 以实现简单和语义化API设计
BFF(Backend for Frontend)
面向前端应用的架构模式, 位于前端和真正的后端之间, 通常作为体验适配层, 处理多端应用的请求, 以及聚合后端提供的原子接口, 让前端应用可以更标准且灵活地访问后端服务
BFF是目前业内成熟的方案, 非常适合大型C端业务