Node.js

250 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情 掌握什么是Node.js?以及基本用法

Node.js是什么?

Node.js是由c语言开发的基于chrome的V8引擎的js运行环境。

Node.js是JavaScript的运行环境。可以把它当作电脑的操作系统。因为软件运用的就是电脑的winndow操作系统。Node.js就相当于是操作系统。发布于2009年5月,由Ryan Dahi开发,是指是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,是的V8在非浏览器环境下原型的刚好。

  • js本身是运行在浏览器的js解释器。chrome的V8引擎兼容性比较好,强大。V8引擎就是chrome的js解释器。

Node.js简介

  • Node.js是一个用于开发web服务器的开发工具。
  • Node.js是一个基于V8 JavaScript引擎运行的平台

V8引擎是谷歌公司开发的而一种高性能的js引擎,该引擎并不局限于在浏览器中运行。Node.js将其转用到了服务器中,并提供了许多附加的具有不同用途的api。

Node.js的作用

Node.js的首要目标是提供一种简单的、用于创建高性能服务器及可在该服务器中运行的各种程序的开发工具。

在使用php Java等这些后台语言的服务器中,每个用户访问服务器就需要占用服务器一定的内存空间,一个8G内存服务器理论上可以同时连接的最大用户数为4000个左右,如果要支持更多的用户,就需要更多的服务器,增加更多的硬件成本。node.js修改了客户端到服务器的链接方法,为每个客户端的链接触发一个node.js内部进行处理的时间。因此,如果使用node.js可以同时处理多达几万个用户的链接(并发)。

Node.js的特点

  1. 运行JavaScript
  2. 依赖于ChromeV8引擎进行代码解释
  3. 事件驱动
  4. 单进程单线程
  5. 非阻塞I/O(事件轮询event loop)
  6. 轻量、可伸缩
  7. 适用于实时数据交互应用

Node.js运行机制(和事件轮询机制提升了Node.js的并发 )

  1. v8引擎解析js
  2. 解析代码后,调用node.js的API接口
  3. libuv库负责Node API的执行,他将不同的任务分配给不同的线程,形成一个event loop,以异步的方式将任务的执行结果返回给V8引擎
  4. V8引擎将结果返回给用户

Node.js的优缺点

优点:

  1. 高并发(最重要的优点)。并发:指允许多少人同时去访问
  2. 适合I/O密集型应用。高并发指的就是IO密集型

缺点:

  1. 不适合CPU密集型应用(指的就是有大量的计算):CPU密集型应用给Node带来的挑战主要是:由于javascript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

解决防范:分解大型运算任务为多个任务,使得运算能够适时释放,不阻塞I/O调用的发起。

  1. 只支持单核CPU,不能充分利用CPU。

  2. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃。

    原因:单进程、单线程

    解决方案:(1)Nigx反向代理,负载均衡,开多个进程,绑定多个端口;

    (2)开多个进程监听同一个端口,使用cluster模块。

  3. 开源组件库质量参差不齐,更新快,向下兼容。

  4. Debug不方便,错误没有stack trace。

Node.js的用途

当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,可以使用node.js来进行应用程序的开发。总的来说Node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。

例如:聊天服务器、综合类服务网站,电子商务网站的服务器等等。

Node.js的应用方向

CPU密集型运算:大量的计算

node -v 检查安装的版本