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
所提供的模块内容。