抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Node.js的特性

简介

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境(runtime), 是一个让 JavaScript 运行在服务端的开发平台, 使用了一个事件驱动、非阻塞 I/O 的模型

非阻塞IO

以JS为例,JavaScript为一种单线程语言,所以如果有很多任务需要执行,只能等前面的任务执行完了,再执行后面的任务。一旦遇到大量任务或者遇到一个耗时的任务(一个I/O),网页就会被卡住。这种就是阻塞 I/O。而Node.js在I/O时函数立即返回,进程不等待I/O完成,因为有Event Loop 的概念来解决这个问题

Event Loop是一个程序结构,用于等待和发送消息和事件。简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为”主线程”;另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为”Event Loop线程”(可以译为”消息线程”)。当程序遇到耗时的I/O操作的时候,就交给Event Loop线程去处理,同时生成一个事件队列来放置这些未执行完的任务,并且监听这些I/O操作是否执行完成,主进程继续执行其他任务;等到I/O操作完成后,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。这样就提高了任务执行的效率,这种运行模式就是非阻塞IO事件驱动

事件驱动

I/O等异步操作结束后的通知,如上所述。其实就是观察者模式

事件循环 Event Loop

异步编程

常用API

path,fs,Buffer,EventEmitter,process

Web为什么最适合Node.js

用JS;在处理高并发(单位时间内访问量大)、I/O密集场景性能优势明显
CPU密集:做计算、逻辑判断(压缩、解压、加密、解密)
I/O密集:文件操作(文件存取)、网络操作(http)、数据库。CPU的处理速度是远大于I/O的,也就是分析web页面需求很快,但是从计算机拿文件比较慢

缺点 & 优点

优点

Node 是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node 上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多

缺点

Node 是一个相对新的开源项目,所以不太稳定,它总是一直在变,而且缺少足够多的第三方库支持。

容错性较差,一旦出错就整个线程挂掉

配合pm2等包,自动重启;

用途

前后端分离

模板渲染

同构

提供Javascript run time进行服务端渲染

日志上报

Nodejs的常用场景

http server与其他语言搭建的服务器对比

参考资料
慕课网-Node.js入门到企业Web开发中的应用
阮一峰的博客

评论