谈谈node相关
优点
-
处理高并发场景性能更佳
-
利用事件驱动、非阻塞和异步IO
-
单线程和非阻塞 I/O:Node.js 采用单线程事件循环模型,通过异步非阻塞 I/O 操作,能够高效处理大量并发请求
-
-
适合I/O密集型应用,指的是应用在运行极限时,CPU占用率仍然比较低,大部分时间是在做 I/O硬盘内存读写操作
缺点
因为Nodejs是单线程,带来的缺点有:
-
不适合CPU密集型应用
-
只支持单核CPU,不能充分利用CPU
-
通过Cluster模块来实现多进程架构
-
可以开启多进程,充分利用多核CPU的性能
-
-
可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
node解决什么需求?
- 前端工程化
- 中间层
- 代理转发
进程和线程
- 启动一个服务,运行一个实例,就是开一个服务进程
- 一个进程是可以拥有多个线程的
node核心模块
Node为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名的核心模块中了,例如文件操作的fs核心模块,http服务器构建的http模块,path路径操作模块,os操作系统信息模块,还要很重要的buffer模块和stream流模块
-
Buffer模块
- Buffer是nodejs可以用来处理二进制流数据
- Buffer 使用连续的内存块来存储数据,可以更高效地利用内存。这在处理大文件或大量二进制数据时尤为重要,因为可以避免不必要的内存分配和复制操作
- 用来操作网络协议、数据库、图片和文件I/O等一些需要二进制的数据的场景
-
Stream模块
stream的应用场景主要就是处理IO操作,而http请求和文件操作都属于IO操作- 可以把
stream流就像水龙头,数据就像水一样,可以按需流动,避免了一次性加载所有数据所带来的内存压力,提升了 IO 操作的性能,还减少了内存占用
-
fs模块
- fs模块是操作文件系统,在一些构建工具的底层比如webpack,很多都用到了fs模块
node常用框架原理
express
- 高度封装了http模块
koa
- koa是洋葱模型
- 洋葱内的每一层都表示一个独立的中间件,用于实现不同的功能
- 每次请求都会经过每一层的中间件,当进入到最里层的中间件之后,就会从最里层的中间件开始逐层返回
- 每一个中间件都要调用next函数,才能执行下一个中间件 (遇到next进入下一个中间件)
egg
-
egg在koa的基础上增强了
-
egg.js 约定了一套代码目录结构
- koa缺少约定规范,egg按照约定规范进行开发
midway
-
基于egg
-
提供依赖注入DI和控制反转 IOC
-
midway也提供了hooks的风格。类似react hooks的语法
-
midway提供了丰富的装饰器,简化开发
nest
-
提供依赖注入DI和控制反转 IOC
-
依赖注入:将依赖注入到容器中
-
控制反转: 控制:控制对象的创建(实例化等)权力,反转:交给ioc容器去控制
-
-
nestjs 的底层代码运用了 Express 和 Fastify
- Fastify 的主要目的是提供极快的 HTTP请求和响应处理
-
约定目录结构,统一规范
- 约定大于配置,好的工程化目录(约定)能够很好的提升项目的可维护性
Serverless部署
serverless最核心的价值是 按量收费
收费模式:
- 部署的内容是一个一个可执行的函数,按照函数的使用量付费
- 包括基于函数调用次数、执行持续时间以及所消耗资源的收费
- CPU的占用率 + CPU使用时长
计费的依据
- CPU的使用
- 网络带宽
serverless对比传统模式
- serverless无需关心服务器、免运维、按需付费、开发可以更加关注业务逻辑等
nodejs在阿里云发布步骤
阿里云的serverless叫:函数计算FC
- 1、进入函数计算FC控制台
- 2、创建node应用
- 3、管理git仓库
谈谈node做中间层
Node中间层的优点有:
-
减轻客户端内存,项目用户体验好;
-
API代理和数据转发:Node.js中间层可以作为API代理,将前端应用程序的请求转发到后端API服务器。这对于解决跨域请求、数据格式转换、数据聚合和数据预处理等问题非常有用。
-
数据转换和格式化:Node.js中间层可以在前端应用程序和后端服务之间进行数据的转换和格式化。例如,它可以将数据库中的原始数据进行处理和转换,以符合前端应用程序的需求
-
服务端渲染,有利于SEO
- 有利于网页被搜索到
- node可以解决seo,用node做服务端渲染