前言

(一)关于 Node

Node是什么?官网上给出的定义是:“一个搭建在Chrome JavaScript运行时上的平台,用于构建高速、可伸缩的网络程序。Node.js采用的事件驱动、非阻塞I/O模型,使它既轻量又高效,并成为构建运行在分布式设备上的数据密集型实时程序的完美选择。”

Node 特点

  1. node 是一个 javascript 的运行环境
  2. 依赖于Chrome V8引擎进行代码解释
  3. 单线程(因为js本身就是单线程)
  4. 异步,事件驱动
  5. 非阻塞I/O
  6. 轻量级

Node 优点

  1. 高并发(最主要优点)
  2. 适合 I/O 密集型应用

Node 缺点

  1. 不适合 CPU 密集型应用,CPU 密集型应用给 Node 带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起,解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
  2. 只支持单核CPU,不能充分利用CPU
  3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃,这是单线程造成的,解决方案:Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
  4. ** 异步操作导致的回调嵌套过多,需要拆解的 function 就很多,看起来很复杂,我目前代码读不懂的原因大概就是这个。**

(二)关于 Express

Express 就是别人造好的轮子,为我们封装了一些实用的工具,比如接收一个 GET 请求,原生 Node 是这样写的:

var http = require('http');
http.createServer(function(req,res){
if(req.url === '/'){
	res.writeHead(200,{'Content-Type':'text/plain'});
	res.end('Hello World');
}
});
http.listen(8081);

使用 Express 可以这样写

var express = require('express');
var app = express();
app.get('/', function (req, res) {
   res.send('Hello World');
})
var server = app.listen(8081)

express 已有些年代,是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,主要基于 Connect 中间件,并且自身封装了路由、视图处理等功能,使用人数众多。

(三)关于 Koa2.0

koa2.0 需要 node8.0 以上版本,因为 node8.0 以上版本开始支持 async/awwait,这是koa2.0最精髓的部分。

(四)Koa2.0 和 Express 的区别

  • Express 采用 callback 来处理异步,Koa 摒弃了"回调",Koa1.0采用了 ES6 的 generator 语法,Koa2.0 采用了 async/await 语法
  • Koa 相比 Express 更小,Express主要基于Connect中间件框架,功能丰富,随取随用,并且框架自身封装了大量便利的功能,比如路由、视图处理等等,而 Koa 不绑定任何中间件,不提供任何工具,需要什么工具就去 require
11-23 03:18