Node.js全解

105 阅读4分钟

项目展示

之前有使用过node.js做过一些项目

0.node.js

学习的时候,有对node进行过总结:node.js背景了解 - 掘金 (juejin.cn) 之前对node.js是crm,以做出东西为标准,但随着面试的到来,必须要对这些知识做一个梳理,构建一个比较完整的知识体系。

对于这个问题的解决,我梳理了一个问题列表,方便知识体系的完善。

一、 node.js的基础了解

  • 什么是node.js
  • node.js和js的区别是什么
  • node.js有什么优势

节点简介.js (nodejs.dev)

1. 什么是node.js?

  • node.js不是web框架,所以,node.js和Flask和Spring不能对比
  • node.js不是编程语言,所以,不能和Python和PHP对比
  • 它是一个平台,将多种技术组合起来,让JS也能调用系统接口,开发后端应用

Node.js 是在Chrome 的 V8 JavaScript 引擎上开发的极其强大的框架 ,可将 JavaScript 直接编译为原生机器码。它是一个轻量级框架,用于创建服务器端 Web 应用程序并扩展 JavaScript API 以提供常用的服务器端功能。它通常用于大型应用程序开发,特别是视频流站点、单页应用程序和其他 Web 应用程序。

2. node.js和js的区别是什么?

特征JavaScriptNodeJS
类型编程语言JavaScript 的解释器和环境
公用事业用于 Web 应用程序的任何客户端活动用于访问或执行任何操作系统的任何非阻塞操作
运行引擎蜘蛛猴 (FireFox)、JavaScript Core (Safari)、V8 (Google Chrome) 等V8 (Google Chrome)

3. node.js有什么优势?

特征描述
快速Node.js 建立在 Google Chrome 的 V8 JavaScript 引擎之上,这使得它的库在代码执行方面非常快
异步基于 Node.js 的服务器从不等待 API 返回数据,从而使其异步
可扩展它是高度可扩展的,因为它的事件机制可以帮助服务器以非阻塞方式响应
开源Node.js 拥有一个广泛的开源社区,该社区贡献了一些优秀的模块来为 Node.js 应用程序添加附加功能
无缓冲Node.js 应用程序只是以块的形式输出数据,从不缓冲任何数据

二、 对node.js技术框架的考察

在写知识体系之前,先了解一下node.js有哪些技术框架

image.png

image.png

image.png

image.png

1.Node.js 的 EventLoop 是什么?

image.png

image.png

Node.js 将各种函数(也叫任务或回调)分成至少 6 类,按先后顺序调用,因此将时 间分为六个阶段:

  1. timers 阶段(setTimeout)
  2. I/O callbacks 该阶段不用管
  3. idle, prepare 该阶段不用管
  4. poll 轮询阶段,停留时间最长,可以随时离开。
    • a. 主要用来处理 I/O 事件,该阶段中 Node 会不停询问操作系统有没有文件数 据、网络数据等
    • b. 如果 Node 发现有 timer 快到时间了或者有 setImmediate 任务,就会主动离 开 poll 阶段
  5. check 阶段,主要处理 setImmediate 任务
  6. close callback 该阶段不用管 Node.js 会不停的从 1 到 6 循环处理各种事件,这个过程叫做事件循环(Event Loop)。

nextTick process.nextTick(fn) 的 fn 会在什么时候执行呢?

  • 在 Node.js 11 之前,会在每个阶段的末尾集中执行(俗称队尾执行)。
  • 在 Node.js 11 之后,会在每个阶段的任务间隙执行(俗称插队执行)。
  • 浏览器跟 Node.js 11 之后的情况类似。可以用 window.queueMicrotask 模拟 nextTick。

Promise Promise.resolve(1).then(fn) 的 fn 会在什么时候执行?

  • 这要看 Promise 源码是如何实现的,一般都是用 process.nextTick(fn) 实现的,所以直 接参考 nextTick。

  • async / await 这是 Promise 的语法糖,所以直接转为 Promise 写法即可。

2. express.js 和 koa.js 的区别是什么?

  • 中间件模型不同:express 的中间件模型为线型,而 koa 的为U型(洋葱模型)。
  • 对异步的处理不同:express 通过回调函数处理异步,而 koa 通过generator 和async/await 使用同步的写法来处理异步,后者更易维护,但彼时 Node.js 对async 的兼容性和优化并不够好,所以没有流行起来。
  • 功能不同:express 包含路由、渲染等特性,而 koa 只有 http 模块。
  • 总得来说,express 功能多一点,写法烂一点,兼容性好一点,所以当时更流行。虽然现在 Node.js 已经对 await 支持得很好了,但是 koa 已经错过了风口。
  • 不过 express 和 koa 的作者都是 TJ 大神