# 目前的几种开发模式
# 前端为什么必须要掌握node
Reaktor Hello World 利用node把卫星放上天
# NodeJS异步IO原理浅析及优化方案
# 异步IO的好处
前端通过异步IO可以消除UI堵塞。 假设请求资源A的时间为M,请求资源B的时间为N.那么同步的 请求耗时为M+N.如果采用异步方式占用时间为Max(M,N)。 随着业务的复杂,会引入分布式系统,时间会线性的增加, M+N+...和Max(M,N...),这会放大同步和异步之间的差异。 I/O是昂贵的,分布式I/O是更昂贵的。 NodeJS 适用于IO密集型不适用CPU密集型 IO密集疯狂吞吐 CPU密集要一直计算(🏦取钱) IO读文件疯狂吃进来,然后看文件操作符是否被占用,当空出来时进行计算。 LIBUV是C编写的,控制event loop、系统回控制大局。
# 几个特殊的API
1.SetTimeout和SetInterval 线程池不参与 2.process.nextTick() 实现类似 SetTimeout(function(){},0);每次调用放入队列中, 在下一轮循环中取出。 3.setImmediate();比process.nextTick()优先级低
setTimeout(function () {
console.log(1);
}, 0);
setImmediate(function () {
console.log(2);
});
process.nextTick(() => {
console.log(3);
});
new Promise((resovle,reject)=>{
console.log(4);
resovle(4);
}).then(function(){
console.log(5);
});
console.log(6);
//libuv不管这些
//同步 > (异步队列优先) > nextTick > Promise > setTimeout(0) > setImmediate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
4、实现睡眠函数
async function test() {
console.log('Hello')
await sleep(1000)
console.log('world!')
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
test()
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 函数式编程在Node中的应用
# NodeJS内存管理机制及内存优化
# V8垃圾回收
分代式的垃圾回收,新生代存活较短(32M 16M),老生代存活比较长(1.4G 0.7G)。
小孩尽管玩,到处丢东西大人收!
如果实时GC系统资源会崩溃
# Scavenge算法
来回倒多次后,to是用到的,from是不用的,看to里超过25%,把from清空干到老生代。
# Mark-Sweep & Mark-compact
# 何时启动GC
# 引用计数DEMO(快照查看)
# V8垃圾回收机制
# 常见内存泄露问题
# 大规模Node站点结构原理分析
# Node集群的应⽤
# UV过千万的 Node站点真身
← spider HTTP协议那些事儿 →