文章目录
Node
基本概念
Node是什么?
Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node不是一门语言是让js运行在后端的运行时,并且不包括javascript全集,因为在服务端中不包含DOM和BOM,Node也提供了一些新的模块例如http,fs模块等。Node.js 使用了事件驱动、非阻塞式 I/O 的模型,使其轻量又高效并且Node.js 的包管理器 npm,是全球最大的开源库生态系统。事件驱动与非阻塞IO后面我们会一一介绍。到此我们已经对node有了简单的概念。
Node解决了哪些问题?
Node在处理高并发,I/O密集场景有明显的性能优势
- 高并发,是指在同一时间并发访问服务器
- I/O密集指的是文件操作、网络操作、数据库,相对的有CPU密集,CPU密集指的是逻辑处理运算、压缩、解压、加密、解密
Web主要场景就是接收客户端的请求读取静态资源和渲染界面,所以Node非常适合Web应用的开发。
JS单线程
javascript在最初设计时设计成了单线程,为什么不是多线程呢?如果多个线程同时操作DOM那岂不会很混乱?这里所谓的单线程指的是主线程是单线程的,所以在Node中主线程依旧是单线程的。
- 单线程特点是节约了内存,并且不需要在切换执行上下文
- 而且单线程不需要管锁的问题
同步异步和阻塞非阻塞
- 同步就是在执行某段代码时,代码没有得到返回之前,其他代码无法执行,当得到了返回值后可以继续执行其他代码。
- 异步就是在执行某段代码时,代码不会立即得到返回结果,可以继续执行其他代码,返回值通过回调来获取
Node中的模块
commonjs 规范
_dirname
_filename
exports
module
require()
Buffer
编码
一个字节由 8 个位组成,gbk 中一个汉字由 2 个字节表示,utf8 中一个汉字由 3 个字节组成
- ASCII 编码
- GB2312
- GBK
- GB18030
- Unicode
- UTF-8
内容会被转为十六进制,比如数字 1 在 ascii 表中为 49(十进制),转成十六进制就是 31。
1 | var buffer = Buffer.from('1') |
Node 中不支持 GBK 编码,需要将 GBK 转为 UTF8 编码。
1 | var iconv = require('iconv-lite') |
1