NodeJS 到底是什么?

159 阅读5分钟

NodeJS 官网:nodejs.org/en/

来自官方的一段话:

基于Chrome V8引擎的JS运行环境,NodeJS使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。

是不是比较懵?什么和什么?下面我用另外一种方式来告诉你什么是NodeJS


JavaScript 中的事件

掌握了JavaScript语言的应该知道,JavaScript语言是作为浏览器的脚本语言,可以实现网页与用户之间的交互。

什么是交互?比如用户在网页中输入用户名或密码,这种用户输入行为就可以叫做交互。

或者用户点击网页中的按钮等等,都可以叫做交互。


JavaScript语言之所以可以实现网页与用户之间的交互,主要是依靠事件来完成的。比如,用户的输入事件、点击按钮事件等等。

通过上面的分析图,我们可以清晰的看到:

  1. 用户点击网页的按钮,执行JavaScript逻辑。
  2. JavaScript逻辑经历三个阶段,分别是捕获事件、触发事件和事件冒泡。
  3. JavaScript逻辑执行完毕后,会将结果返回网页。
  4. 网页再根据结果显示给用户。

通过这样的一个小案例,我们可以知道JavaScript语言处理网页与用户之间的交互,主要是依靠「事件驱动」。


V8 引擎

目前几乎所有的浏览器都支持JavaScript语言,之所以支持的原因在于浏览器中都集成了JavaScript引擎。

在众多浏览器中,Chrome浏览器的性能相对更好,而且Chrome浏览器集成的 V8 JavaScript引擎还是开源的。


NodeJS中的JavaScript引擎没有BOMDOM

NodeJSJavaScript的一种运行环境,是对Google V8引擎进行的封装,是一个服务器端的JavaScript的解释器。


还是不明白NodeJS有啥特殊的?

JavaScript是一门脚本语言,它需要一个运行环境。就好像PHP需要ApacheJSP需要Tomcat等等(例子不全面,仅供理解)……

NodeJS之前,JavaScript运行环境是浏览器,也就是JavaScript在网页中才能跑起来。NodeJS之后JavaScript又多了一个运行环境,就是NodeJS

由于NodeJS的最底层是Chrome的 V8 引擎,然后libuv封装了一些I/O的线程池管理和网络的I/O操作,这部分是C/C++写的。NodeJS可以控制系统文件的读写,网络的输入输出。所以NodeJS又可以被单纯的认为是一个可以运行JavaScript的服务器。


那在网页中使用JavaScript语言和在Node.js中使用JavaScript语言有什么不同呢?我们可以通过下面这张图来了解一下。

通过上图可以清晰地看到,Node.js相对于浏览器Node.js没有提供WebKit内核和HTML相关的UI技术。也就是说,Node.js只提供了JavaScript语言。


目前NodeJS大多被用于前端开发的开发环境。

Webpack作为例子,webpack是一个运行在NodeJS端的打包工具,它帮你把你写的a.js,b.js, c.js ... 打包成一个bundle.js

而这种打包的第一步是读取(文件读取能力)你的a.js, b.js, c.js ...,所以只能在NodeJS环境下做。


那 vue-cli 和 NodeJS 有啥联系?

vue-cli react-cling-cli都是运行在NodeJS环境下的脚手架。也就是说我们不可以直接在浏览器里运行vue-cli 因为有了文件读写的能力,所以vue-cli可以帮我们集成(或者打包)vue核心模块,并将我们的代码转义,压缩。

所以vue-cli是运行在NodeJS环境下帮助我们开发基于Vue框架的项目的脚手架。


所以啊,我个人觉得,NodeJS对于前端最大的贡献,就是可以帮前端做各种轮子(工具),让前端上了一个等级,什么压缩,css前缀啊,打包发布啊,你前端自己都能玩转了。

不然,像以前那样只有<script></scirpt>不得急死。。。


什么是服务器?

那服务器又是什么呢?如果把一个WEB应用比作是一个人的话,那服务器就是人的大脑。

通过上面的图我们可以知道,人与人交流时,基本上要通过以下几个步骤:

  1. 别人与我交流,我是通过人的感官进行接收。
  2. 感官将信息传递给大脑。
  3. 大脑接收到信息后,进行处理,将处理的结果返回。
  4. 再通过感官反馈给与我交流的人。

通过这个过程,我们可以发现,别人是直接通过感官与我交流的,并不知道大脑是如何工作的,也并不关心大脑是如何工作的。

WEB应用与人类似,用户是与网页进行交互,网页将信息传递给服务器,服务器接收、处理并响应,最后网页将结果显示给用户。

作为用户来说,并不关心服务器是如何工作的,甚至用户都感觉不到服务器的存在。但是,作为开发人员,想要开发一个完整的WEB应用,服务器的逻辑核心。


Node.js 的简单理解

讲到这里,我们可以简单地来归纳一下Node.js到底是什么了。

Node.js就是基于Chrome浏览器的 V8 JavaScript引擎,以JavaScript语言为核心开发语言的服务器技术。

如果使用Node.js开发一个WEB应用应该是怎么样的呢?


由于JavaScript逻辑是依靠事件驱动的,所以就不难理解Node.js是事件驱动的了。

Node.js除了是基于Chrome浏览器的 V8 引擎以外,还提供了一系列的模块,让我们可以方便地实现一些功能。比如,处理客户端的请求、文件的处理等操作。

我们学习Node.js,主要就是学习Node.js所提供的模块内容。

最后

如有问题,欢迎留言讨论。

欢迎关注我的语雀:www.yuque.com/xiechen

感谢: