Node.js入门教程 第一篇 (概念原理及环境配置)

注:为了本教程的准确性,部分描述引用了官网及网络内容。

Node.js 概念

Node.js本质上是使用Google的V8引擎制作出来的服务框架。V8本身是Google为了解决Chrome浏览器的性能问题而制作的前端引擎(开源)。本身依托于浏览器引擎,这也是为什么Node.js使用的是前端的JavaScript语言编程。

V8的诞生是Google为了解决JavaScript的性能问题,用了内联缓存和隐藏类技术实现的前端引擎。V8使用C++编写,也因此V8可以在C++项目中完美兼容使用。

V8被Google使用在大多数产品中,如Chrome浏览器,安卓浏览器等。

V8引擎在不断升级,Node.js本身也在不断更新,在下载Node.js安装包时就携带对应版本的V8引擎。若需要查看V8版本,在CMD中输入:

1 node -p process.versions.v8

如需要查看Node.js的版本,输入:

1 node -v

 

Node.js基础原理

在Node.js中最主要的特性,即事件驱动与非阻塞I/O都与其底层的特殊实现有关。在Node.js的底层有一个事件轮循器(Event Loop)。每当有事件注册时,会先将事件放置到事件队列(Event Queue),并通过事件轮循器顺序执行事件队列。当轮循到一个事件时,事件轮循器会为其分配一个工作线程(Worker Threads)执行该事件,事件完成后通过执行回调(Callback)返回到事件列表并通过V8引擎传递给应用(Application)。

其详细步骤为:

1、应用层发出请求给V8

2、V8通过Node.js的中间层(Bindings)传递给底层(Libuv)

3、在Libuv层中,请求会按顺序放置在事件队列(Event Queue)

4、事件轮询器(Event Loop)依次为事件队列中的事件分配工作线程(Worker Threads)

5、工作线程完成事件,并通过执行回调(Callback)返回事件列表

6、事件的执行结果通过中间层及V8返回给应用

在应用层中,发送请求后会继续执行应用层后续代码,而不需要等待事件的完成,所以是异步处理。事件处理完成后通过回调返回到应用。整个过程只由一个主线程完成,因此不存在死锁、等待的情况。

这就是Node.js的事件驱动与I/O非阻塞的实现原理。

 

其中,V8是Node.js依赖的核心库,而Bindings层及Libuv层是Node.js中用C++写的原创底层。

最上层的standard library是用JavaScript写的Node.js基础库。里面有各种常用的API,如:http模块、fs模块等。我们实际中最常用的就是standard library层。

  

其他概念

npm是Node.js的包管理工具,可以通过npm下载已有的第三方包到自己的项目中,也可以上传自己代码给别人使用。npm会随Node.js的安装包一并安装。

查看npm版本:

1 npm -v

其他常用的npm命令:

1 npm view XX version  查看版本(如:npm view express version)
3 npm install XX --save  安装包
5 node XX.js  启动一个服务入口(如:node index.js)
7 npm run dev 启动客户端 npm run build 启动发布

REPL(交互式解释器)可以输入代码实时执行,用以测试JavaScript代码块。主要用在Linux等非图像界面服务器的代码调试场景中。

 

安装Node.js

1.下载node.js :https://nodejs.org/en/download/

2.安装完成后,环境变量会在安装过程中自动设置好。若使用的是zip压缩版解压的node.js,则需手动配置环境变量Path:

 

 3.打开cmd,命令行:“node --version”检查Node.js版本,显示正确的版本号即安装成功。

 4.配置npm源(重要

--全局配置切换到淘宝源(推荐此项,因为外网连接不稳定):

 命令行: npm config set registry https://registry.npm.taobao.org 

--全局配置切换到官方源:

 命令行: npm config set registry http://www.npmjs.org 

--查看当前源:

 命令行: npm config get registry 

 

posted @ 2019-10-09 17:03  Hi-Jimmy  阅读(443)  评论(0编辑  收藏  举报