node.js 简介
node.js 是⼀个 JS 的服务端运⾏环境
node.js 版本切换
node 多版本管理工具,nvm 的全称就是 node version manager
curl -ohttps://raw.githubusercontent.com/nvmsh/nvm/v0.35.3/install.sh | bash
安装成功之后,我们就能在当前的操作系统中使⽤多个 node.js 版本。
node.js 的底层依赖模块
- V8 引擎:JS 语法解析引擎
- libuv: C语⾔实现的⼀个⾼性能异步⾮阻塞 IO 库,⽤ 来实现 node.js 的事件循环
- http-parser / llhttp: 底层处理 http 请求,处理报⽂, 解析请求包等内容
- openssl: 处理加密算法,各种框架运⽤⼴泛
-
node.js 常⻅内置模块
node.js 中最主要的内容,就是实现了⼀套 CommonJS 的模块化规范,以及内置了⼀些常⻅的模块。
fs: ⽂件系统,能够读取写⼊当前安装系统环境中硬盘的数据
- path: 路径系统,能够处理路径之间的问题
- crypto: 加密相关模块,能够以标准的加密⽅式对内容进⾏加解密
- dns: 处理 dns 相关内容,例如我们可以设置 dns 服 务器等等 http: 设置⼀个 http 服务器,发送 http 请求,监听 响应等等
- readline: 读取 stdin 的⼀⾏内容,可以读取、增加、 删除我们命令⾏中的内容
- os: 操作系统层⾯的⼀些 api,例如告诉你当前系统类 型及⼀些参数
- vm: ⼀个专⻔处理沙箱的虚拟机模块,底层主要来调⽤ v8 相关 api 进⾏代码解析。
node.js 源码
V8 引擎:
- https://github.com/v8/v8 /
- https://chromiu m.googlesource.com/v8/v8.git
node.js 周边⼯具简介及解析
node.js debug & 内存泄漏
对于浏览器的 JS 代码来说,我们可以通过断点进⾏分步调试,每⼀步打印当前上下⽂中的变量结果,来定位具 体问题出现在哪⼀步。 我们可以借助 VSC 或者⾃⾏打断点的形式,来进⾏分步 node.js 调试。 对于 JS 内存泄漏,我们也可以使⽤同样的道理,借助⼯具,打印每次的内存快照,对⽐得出代码中的问题。
-
另⼀种 JS 解析引擎 quickjs
quickjs 是⼀个 JS 的解析引擎,轻量代码量也不⼤,与 之功能类似的就是 V8 引擎。
他最⼤的特点就是,⾮常⾮常轻量,这点从源码中也能 提现,事实上并没有太多的代码,它的主要特点和优势: 轻量⽽且易于嵌⼊:只需⼏个C⽂件,没有外部依 赖,⼀个x86下的简单的“hello world”程序只要180 KiB。
- 具有极低启动时间的快速解释器: 在⼀台单核的台式 PC上,⼤约在100秒内运⾏ECMAScript 测试套件1 56000次。运⾏时实例的完整⽣命周期在不到300微 秒的时间内完成。
- ⼏乎完整实现ES2019⽀持,包括: 模块,异步⽣成 器和和完整Annex B⽀持 (传统的Web兼容性)。许多ES2020中带来的特性也依然会被⽀持。 ‘
- 通过100%的ECMAScript Test Suite测试。
可以将Javascript源编译为没有外部依赖的可执⾏⽂件。
另⼀类 JS 运⾏时服务端环境 deno
deno 是⼀类类似于 node.js 的 JS 运⾏时环境,同时他 也是由 node.js 之⽗⼀⼿打造出来的,他和 node.js ⽐ 有什么区别呢?
相同点:deno 也是基于 V8 ,上层封装⼀些系统级别的调⽤
我们的 deno 应⽤也可以使⽤ JS 开发
不同点:
deno 基于 rust 和 typescript 开发⼀些上层模块,所 以我们可以直接在 deno 应⽤中书写 ts
- deno ⽀持从 url 加载模块,同时⽀持 top level await 等特性
- https://deno.land/