node.js 简介

node.js 是⼀个 JS 的服务端运⾏环境

  • 在 JS 语⾔规范的基础上,封装了⼀些服务端的运⾏时对象,增加与操作系统之间的交互。

    node.js 的安装

  • 使⽤直接下载⼆进制安装⽂件安装,

  • 通过系统包管理进⾏安装或者通过源码⾃⾏编译均可。

node.js 版本切换

node 多版本管理工具,nvm 的全称就是 node version manager

  1. 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: 处理加密算法,各种框架运⽤⼴泛
  • zlib: 处理压缩等内容

    node.js 常⻅内置模块

    node.js 中最主要的内容,就是实现了⼀套 CommonJS 的模块化规范,以及内置了⼀些常⻅的模块。

  • fs: ⽂件系统,能够读取写⼊当前安装系统环境中硬盘的数据

  • path: 路径系统,能够处理路径之间的问题
  • crypto: 加密相关模块,能够以标准的加密⽅式对内容进⾏加解密
  • dns: 处理 dns 相关内容,例如我们可以设置 dns 服 务器等等 http: 设置⼀个 http 服务器,发送 http 请求,监听 响应等等
  • readline: 读取 stdin 的⼀⾏内容,可以读取、增加、 删除我们命令⾏中的内容
  • os: 操作系统层⾯的⼀些 api,例如告诉你当前系统类 型及⼀些参数
  • vm: ⼀个专⻔处理沙箱的虚拟机模块,底层主要来调⽤ v8 相关 api 进⾏代码解析。

node.js 源码

V8 引擎:

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/

https://www.wangjxk.top/frontend/nodejs/