1 node 介绍
1 node 的利用场景
1 工具类 gulp webpack vite(node 能够让 js 运行在服务器)
2 能够做服务端 优化 ssr
3 能够做中间层(解决跨域问题,格式化数据)
2 性能
非阻塞
异步 I /O(当这个办法调用结束后不会立刻返回后果)
事件驱动(公布订阅模式)
3 劣势
在 Java、PHP 或者.NET 等服务器语言中,会为每一个客户端连贯创立一个新的线程。而每个线程须要消耗大概 2MB 内存。也就是说,实践上,一个 8GB 内存的服务器能够同时连贯的最大用户数为 4000 个左右。要让 web 应用程序反对更多的用户,就须要减少服务器的数量,而 web 应用程序的硬件老本当然就回升了。
NodeJs 不为每个客户连贯创立一个新的线程,而仅仅应用一个线程。当有用户连贯了,就触发一个外部事件,通过非阻塞 I /O、事件驱动机制,让 Node.js 程序宏观上也是并行的。应用 Node.js,一个 8GB 内存的服务器,能够同时解决超过 4 万用户的连贯。
2 node 的全局对象和模块
1 global
global 是全局对象,能够间接拜访外面的属性
外面有:
- Buffer
- process
- setInterval,setTimeout,setImmediate
- console
- queueMicrotask
2 模块
- __dirname
- __filename
- exports
- module
- require()
3 process 罕用属性或办法
process.platform 零碎
process.kill 杀过程
process.exit 退出过程
process.nextTick node 中的微工作 以后执行栈的底部 优先级比 promise 高
process.cwd() 以后的工作目录, 是可变的,看命令在哪里执行(__dirname 以后文件所在的文件夹,此门路不会发生变化)
process.env 环境变量(能够 set,例如 process.env.NODE_ENV)
process.argv 执行时所带的参数
4 事件环机制
重要的三个阶段
timer 寄存定时器
poll 轮询解决 I / O 回调
check setImmediate
如果在 I/O 回调的办法里,setImmediate 优先于 timer 执行
应为 poll 接下来是 check
nextTick 算是一个微工作,不在事件环中
在 node 11 以上 宏工作与微工作的执行程序与浏览器一样
5 Buffer
JavaScript 语言本身只有字符串数据类型,没有二进制数据类型。
但在解决像 TCP 流或文件流时,必须应用到二进制数据。因而在 Node.js 中,定义了一个 Buffer 类,该类用来创立一个专门寄存二进制数据的缓存区。在 Node.js 中,Buffer 类是随 Node 内核一起公布的外围库。Buffer 库为 Node.js 带来了一种存储原始数据的办法,能够让 Node.js 解决二进制数据,每当须要在 Node.js 中解决 I / O 操作中挪动的数据时,就有可能应用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 相似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。Buffer 属于 global 上的属性能够间接被拜访,读取文件,写入(二进制)从硬盘中读取的数据都存到内存上,buffer 能够和字符串互相转化
定义 buffer 的三种形式
let buf1 = Buffer.alloc(6);
let buf2 = Buffer.from('珠峰');
let buf3 = Buffer.from([65,66,67]);
buffer 中罕用的办法
- buff.toString()
- buff.fill()
- buff.slice()
- buff.copy
- Buffer.concat()
- Buffer.isBuffer()
- indexOf