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
原文地址:https://www.cnblogs.com/JHelius/p/11642877.html