Jacleklm's Blog

Nodejs基础

2019/11/02

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开发中的应用
阮一峰的博客

CATALOG
  1. 1. Node.js的特性
    1. 1.1. 简介
    2. 1.2. 非阻塞IO
    3. 1.3. 事件驱动
    4. 1.4. 事件循环 Event Loop
    5. 1.5. 异步编程
    6. 1.6. 常用API
      1. 1.6.1. Web为什么最适合Node.js
    7. 1.7. 缺点 & 优点
      1. 1.7.1. 优点
      2. 1.7.2. 缺点
        1. 1.7.2.1. 容错性较差,一旦出错就整个线程挂掉
    8. 1.8. 用途
      1. 1.8.1. 前后端分离
      2. 1.8.2. 同构
      3. 1.8.3. 日志上报
    9. 1.9. Nodejs的常用场景
    10. 1.10. http server与其他语言搭建的服务器对比