Sanakey

NodeJS简介
从诞生时的饱受争议,到如今的如火如荼,NodeJS经过多年发展,现今前端开发早已离不开NodeJS。 方便管理的...
扫描右侧二维码阅读全文
09
2019/09

NodeJS简介

从诞生时的饱受争议,到如今的如火如荼,NodeJS经过多年发展,现今前端开发早已离不开NodeJS。
方便管理的npm包,前端工程化的构建,大型公司前端+NodeJS+服务端的结构...
NodeJS让前端开发变得更高效的同时,也为前端带来了更多的职业晋升与发展空间。在前后端界限越来越模糊的大背景下,NodeJS是前端快速走向全栈发展的捷径。

NodeJS简介

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。
Node 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

NodeJS的特点

Node.js作为服务端的新生物,相比传统的webserver服务模式,最大的特点与优势有如下几种

单线程

在传统服务器端语言如Java、PHP或者.net等中,会为每一个客户端连接创建一个新的线程。 而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器可以同时连接的最大用户数为 4000 个左右。

NodeJS可以在不新增额外线程的情况下,依然可以对任务进行并发处理,它不会为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了, 就触发一个内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。使用 Node.js,一个 8GB 内存的服务器,可以同时处理超过 4 万用户的连接。

非阻塞I/O

程序执行的过程中会有很多的I/O操作,如读写文件,请求响应等等,在阻塞性IO特性的语言中,当读取一个文件, 整个流程都暂停下来,需要等待文件读取成功后才能进行下一步操作,也就是I/O操作阻塞了代码的执行,这样会极大的降低程序的效率。

非阻塞I/O也就是指程序在执行的过程中,I/O操作不会阻塞程序的执行,NodeJS在读取文件程序的同时,也能继续执行其他的代码。

基于 Chrome V8 引擎

V8引擎是谷歌开源的JavaScript解释器,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。因此JavaScript程序在V8引擎下的运行速度媲美二进制程序。

从08年诞生的这10多年时间,V8引擎的性能至少提升了4倍,这些年谷歌的程序猿一直在压榨V8引擎的性能,如今也在继续,因此称V8是地表最强JS引擎也不为过。

事件循环与事件驱动

  • 事件循环

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

Node.js 几乎每一个 API 都是支持回调函数的。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

  • 事件驱动

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

这个模型非常高效可扩展性非常强,因为 webserver 一直接受请求而不等待任何读写操作。(这也称之为非阻塞式IO或者事件驱动IO)

在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

环境搭建

NodeJS的环境搭建很简单,在官网下载安装包后,一路下一步即可。

如果有不明白的地方,参考这里

不过个人建议不要直接安装NodeJS,而是使用nvm安装管理NodeJS。

使用nvm管理NodeJS版本

由于NodeJS更新很快,因此经常遇到不同项目必须依赖不同版的NodeJS运行环境。如果没有好的版本管理工具,你需要重复卸载安装,过程十分麻烦。好在有nvm这么一个工具,可以有效解决这一问题。

nvm的使用方式可以 参考这里

Last modification:November 21st, 2019 at 02:27 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment

flandre.png