Nodejs项目架构和优化

Nodejs应用场景

  1. Web开发:Express + EJS + Mongoose/MySQL
  2. REST开发:Restify
  3. Web聊天室(IM):Express + Socket.io
  4. Web爬虫:Cheerio/Request
  5. Web博客:Hexo
  6. Web论坛: nodeclub
  7. Web幻灯片:Cleaver
  8. 前端包管理平台: bower.js
  9. Auth认证:Passport
  10. 定时任务工具: later
  11. 浏览器环境工具: browserify
  12. 命令行编程工具:Commander
  13. Web控制台工具: tty.js
  14. 客户端应用工具: node-webkit
  15. 操作系统: node-os

Node架构和优化

  1. NodeJS异步优化IO原理浅析及优化方案
  • 异步IO的是与非

前端通过异步IO(input输入/output输出)可以消除UI堵塞
NodeJs适用于IO密集型不适用CPU密集型

  • Node对异步IO的实现
1
2
3
4
5
6
7
8
9
var fs = require('fs');

fs.readFile('/path1', function (err, file) {
console.log('读取文件1完成');
});

fs.readFile('/path2', function (err, file) {
console.log('读取文件2完成');
});

完美的异步IO应该是应用程序发起非阻塞调用,无需通过遍历或者事件幻想等方式轮询。

  • 几个特殊的API

SetTimeout和Setinterval线程池不参与

process.nextTick()实现蕾西SetTimeout(function(){},0),每次调用放入队列中,在下一轮循环中取出。

setImmediate()比process.nextTick()优先级低

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
setImmediate(function(){
console.log(2)
})
setTimeout(function(){
console.log(1)
},0)
new Promise((resovle,reject)=>{
console.log(4)
resovle(4)
}).then(function(){
console.log(5)
})
process.nextTick(()=>{
console.log(3)
})
console.log(6)

// 4 6 3 5 1 2
// sync > micro(tick > promise) > macro(timeout, immediate)

Node如何实现一个Sleep(休眠)?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function sleep1(ms, callback) {
setTimeout(callback, ms)
}
//sleep 1s
sleep1(1000, () = >{
console.log(1000)
})
//方法二
function sleep2(ms) {
return new Promise(function(resolve, reject) {
setTimeout(resolve, ms)
})
}
sleep2(1000).then(() = >{
console.log(2000)
})
//方法三
function sleep3(ms) {
return new Promise(function(resolve, reject) {
setTimeout(resolve, ms)
})
}
async
function init() {
await sleep3(1000);
}
init().then(() = >{
console.log(3000)
})
  • 函数式编程在Node中的应用
  • 常用的Node控制异步API的技术手段
  1. NdoeJS内存管理机制及内存优化
  • V8垃圾回收机制

  • 新生代内存、老生代内存

  • 内存监控

  • 内存泄漏分析(内存快照)

  • 性能监控

dynatrace
monitr
easy-monitor
CPU占用率,内存数

  • 异常处理

try catch的方式捕获业务异常
全局捕获异常
koa中间件捕获

  1. 大规模Node站点解构原理分析
  • Nginx
  • PM2
  1. 服务器集群管理与Node集群的应用

  2. ServerLess/FAAS