NodeJS 官网:nodejs.org/en/
来自官方的一段话:
基于
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的解释器。
还是不明白NodeJS有啥特殊的?
JavaScript是一门脚本语言,它需要一个运行环境。就好像PHP需要Apache,JSP需要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-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所提供的模块内容。
最后
如有问题,欢迎留言讨论。
欢迎关注我的语雀:www.yuque.com/xiechen
感谢: