# 目前的几种开发模式

An image

# 前端为什么必须要掌握node

An image

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是更昂贵的。 An image An image NodeJS 适用于IO密集型不适用CPU密集型 IO密集疯狂吞吐 CPU密集要一直计算(🏦取钱) IO读文件疯狂吃进来,然后看文件操作符是否被占用,当空出来时进行计算。 An image LIBUV是C编写的,控制event loop、系统回控制大局。 An image

# 几个特殊的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

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

# 函数式编程在Node中的应用

An image

An image

# NodeJS内存管理机制及内存优化

# V8垃圾回收

An image

分代式的垃圾回收,新生代存活较短(32M 16M),老生代存活比较长(1.4G 0.7G)。

小孩尽管玩,到处丢东西大人收!

如果实时GC系统资源会崩溃

# Scavenge算法

An image

An image

来回倒多次后,to是用到的,from是不用的,看to里超过25%,把from清空干到老生代。

# Mark-Sweep & Mark-compact

An image

An image

# 何时启动GC

An image

# 引用计数DEMO(快照查看)

An image

# V8垃圾回收机制

An image

# 常见内存泄露问题

An image

# 大规模Node站点结构原理分析

# Node集群的应⽤

An image

An image

An image

An image

An image

# UV过千万的 Node站点真身

An image

An image