3 分钟了解什么是 Node.js

602 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

什么是Node.js

Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine

Node.js 是一个基于V8 JavaScript引擎的JavaScript运行时环境

Node.js的目标是让并发编程更简单,主要应用在以网络编程为主的 I/O 密集型应用

首先我们要知道 Node.js 应用程序在单个进程中运行,它无需为每个请求创建新的线程

Node.js 在其标准库中提供了一组异步的 I/O 原语,以防止 JavaScript 代码阻塞,通常,Node.js 中的库是使用非阻塞范式编写的,使得阻塞行为成为异常而不是常态;每当 Node.js 执行 I/O 操作时(比如从网络读取、访问数据库或文件系统),Node.js 将在响应返回时恢复操作(而不是阻塞线程和浪费 CPU 周期等待)

官方文档:   Node.js 官网   Node.js API标准库 中文  

思考

在具体阐明 Node.js 有什么优点之前我们先看三个问题

JavaScript代码,在浏览器中是如何被执行的?

由于浏览器内核执行的,不同的浏览器有不同的内核组成

各个浏览器内核各不相同,但事实上,我们所说的浏览器内核实际上指的是浏览器的 排版引擎(layout engine),也称为浏览器引擎(browser engine),页面渲染引擎(rendering engine) 或 样版引擎

JavaScript代码由谁来执行呢?

由于浏览器引擎执行,这里我们粗略说一下 V8引擎

V8引擎可以说是JavaScript的解释器,V8引擎包括两个阶段:编译、执行,编译阶段指V8将JavaScript转换为字节码或者二进制机器码,执行阶段指解释器解释执行字节码,或者CPU直接执行二进制机器码

V8引擎与Node.js之间有什么联系?

Node.js 基于V8引擎来执行 JavaScript 的代码,但是不仅仅只有V8引擎:因为 V8 可以嵌入到任何C ++应用程序中,所以无论是 Chrome 还是 Node.js,事实上都是嵌入了 V8 引擎来执行 JavaScript 代码;

但是在 Chrome 浏览器中,还需要解析、渲染HTML、CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API、浏览器自己的事件循环等;另外,在Node.js中我们也需要进行一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作

浏览器 与 Node 的架构区别

通过这张图我们可以知道,Node的架构比浏览器少了2个东西 HTML/CSSBlink;而且浏览器的中间层采用的是Libuv进行异步开发的,Libuv较libevent而言,设计更简练,性能更好;并且可以摊开说NodeJs架构中最重要的就是这个libuv的外部中间件,它为Node提供了一整套完善的EventLoop事件循环机制

image-20220609145757953

Node.js 的优缺点

最后简单说一下Node的优缺点:

优点:

  1. Node.js 是基于事件驱动和无阻塞的,所以它非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现的服务器表现要好得多
  2. Node.js 在底层构建了很多异步I/O的API,从文件读取到网络请求等,均是如此;这样的意义在于,在Node中,我们可以从语言层面很自然地进行并行I/O操作;每个调用之间无须等待之前的I/O调用结束,在编程模型上可以极大提升效率
  3. Node.js 保持了JavaScript在浏览器中单线程的特点,而且在 Node 中 JavaScript 与其余线程是无法共享任何状态的

缺点: 不适合计算密集型应用,不适合大内存以及大量同步场景的应用

最后如果本文对于本文有疑惑,还请指导勘正 (●'◡'●)