前言
(一)关于 Node
Node是什么?官网上给出的定义是:“一个搭建在Chrome JavaScript运行时上的平台,用于构建高速、可伸缩的网络程序。Node.js采用的事件驱动、非阻塞I/O模型,使它既轻量又高效,并成为构建运行在分布式设备上的数据密集型实时程序的完美选择。”
Node 特点
- node 是一个 javascript 的运行环境
- 依赖于Chrome V8引擎进行代码解释
- 单线程(因为js本身就是单线程)
- 异步,事件驱动
- 非阻塞I/O
- 轻量级
Node 优点
- 高并发(最主要优点)
- 适合 I/O 密集型应用
Node 缺点
- 不适合 CPU 密集型应用,CPU 密集型应用给 Node 带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起,解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
- 只支持单核CPU,不能充分利用CPU
- 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃,这是单线程造成的,解决方案:Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
- ** 异步操作导致的回调嵌套过多,需要拆解的 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