NodeJS 官网:
Node.js
来自官方的一段话:
:::info
基于Chrome V8引擎的JS运行环境,NodeJS使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。
:::
是不是比较懵?什么和什么?下面我用另外一种方式来告诉你什么是NodeJS!
JavaScript 中的事件
掌握了JavaScript语言的应该知道,JavaScript语言是作为浏览器的脚本语言,可以实现网页与用户之间的交互。
什么是交互?比如用户在网页中输入用户名或密码,这种用户输入行为就可以叫做交互。 或者用户点击网页中的按钮等等,都可以叫做交互。
JavaScript语言之所以可以实现网页与用户之间的交互,主要是依靠事件来完成的。比如,用户的输入事件、点击按钮事件等等。
通过上面的分析图,我们可以清晰的看到:
- 用户点击网页的按钮,执行
JavaScript逻辑。 JavaScript逻辑经历三个阶段,分别是捕获事件、触发事件和事件冒泡。- 当
JavaScript逻辑执行完毕后,会将结果返回网页。 - 网页再根据结果显示给用户。
通过这样的一个小案例,我们可以知道JavaScript语言处理网页与用户之间的交互,主要是依靠「事件驱动」。
V8 引擎
目前几乎所有的浏览器都支持JavaScript语言,之所以支持的原因在于浏览器中都集成了JavaScript引擎。
在众多浏览器中,Chrome浏览器的性能相对更好,而且Chrome浏览器集成的 V8 JavaScript引擎还是开源的。NodeJS中的JavaScript引擎没有BOM、DOM。**NodeJS**是**JavaScript**的一种运行环境,是对**Google** V8引 擎进行的封装,是一个服务器端的**JavaScript**的解释器。
:::info
还是不明白**NodeJS**有啥特殊的?JavaScript是一门脚本语言,它需要一个运行环境。就好像PHP需要Apache,JSP需要Tomcat等等(例子不全面,仅供理解)……
而NodeJS之前,JavaScript运行环境是浏览器,也就是JavaScript在网页中才能跑起来。NodeJS之后JavaScript又多了一个运行环境,就是NodeJS。
:::
:::warning
由于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-cli**和**ng-cli**都是运行在**NodeJS**环境下的脚手架。也就是说我们不可以直接在浏览器里运行**vue-cli**。因为有了文件读写的能力,所以vue-cli可以帮我们集成(或者打包)vue核心模块,并将我们的代码转义,压缩。
所以**vue-cli**是运行在**NodeJS**环境下帮助我们开发基于**Vue**框架的项目的脚手架。
所以啊,我个人觉得,
NodeJS对于前端最大的贡献,就是可以帮前端做各种轮子(工具),让前端上了一个等级,什么压缩,css前缀啊,打包发布啊,你前端自己都能玩转了。 不然,像以前那样只有<script></scirpt>不得急死。。。
什么是服务器?
那服务器又是什么呢?如果把一个WEB应用比作是一个人的话,那服务器就是人的大脑。
通过上面的图我们可以知道,人与人交流时,基本上要通过以下几个步骤:
- 别人与我交流,我是通过人的感官进行接收。
- 感官将信息传递给大脑。
- 大脑接收到信息后,进行处理,将处理的结果返回。
- 再通过感官反馈给与我交流的人。
通过这个过程,我们可以发现,别人是直接通过感官与我交流的,并不知道大脑是如何工作的,也并不关心大脑是如何工作的。
而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所提供的模块内容。
