Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node 是一个让 JavaScript 运行在服务端的开发平台, 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。
Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。Node是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
在理解node之前 先明确几个概念:
终端
终端指的是设备终端终端设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等;
客户端
客户端与服务段对应, 又称为用户端, 为用户提供本地服务的程序,用来接收来自服务端的数据或者资源, 也可以理解为软件;
服务端
为客户端提供服务, 例如 数据资源
运行服务器的终端叫服务器;
JS是一门脚本语言 脚本语言徐亚一个解析器, 在客户端,浏览器的JS引擎充当了JS的解析器;
而在服务端, nodejs充当了解析器
解析器其实是一个运行环境, 在客户端, 解析器提供了操作dom, bom的接口,而在nodejs中解析器提供了操作磁盘和文件的接口.
node特点
1.非阻塞I/O
在单线程当中,当一段代码运行需要很长时间的时候,, 比如 一个没有终止的递归或者一个没有结束条件的循环, 后面的代码处于等待状态, 在浏览器端的表现也就是常常说的浏览器假死; 而在node.js中,采用了非阻塞I/O的机制,就是说当一个请求所返回的数据需要很长时间, 那么会把这段请求代码放在回调函数中, 当主线程的任务执行完成时, 再去读取放在任务队列的请求的数据, 通过不同地轮询(Event Loop) 直到数据正常返回, 再去处理数据, 从而提升了执行效率。
2.事件驱动
事件驱动的编程思想主要是通过事件或者状态变化来进行应用程序的流程控制, 一般通过事件驱动来完成. 一旦事件被监测到 则调用响应的回调函数; 简单来说, 就是当异步任务执行的时候 会被放置到任务队列中, 主线程任务完毕后 会读取任务队列中的事件, 因为任务队列中的每一个异步任务执行完毕后都会在队列中添加一个事件 而js而js主线程执行完后就会执行这些事件,从而调起对应的回调函数放入主线程中进行执行
3.单线程
在Java或PHP中,会为每一个客户端链接创建一个线程,而每个线程需要大约2MB的内存,在一个8GB的服务器上,大约能同时为4000左右的用户服务,而nodeJS通过非阻塞I/O、事件驱动机制,可以同时处理超过4万的用户连接,缺点就是一个用户造成的线程奔溃会让整个服务器都崩溃,其他用户也会崩溃;
单线程在同一时刻只能执行一个任务,也就是说,执行环境相对更简单,更高效,但是在单线程中I/O设备对其来说是致命的,因为I/O是阻塞形式的,然而nodeJS中,将异步数据放在任务队列中执行,从而不阻塞主线程任务的执行,当异步任务执行完毕后,在任务队列添加事件,等待执行,从而提高了效率
单线程也就是同一时刻只能做同一件事情
4.跨平台
nodeJS是服务端的,基于chrome的V8引擎,是JavaScript的运行环境,因此没有运行的限制,与浏览器没有任何关系,并不会因为IE而产生兼容问题等