BFF架构 background for front
SSR 服务端渲染,为什么做服务端渲染呢,提高SEO,还有就是减少http请求,首屏加载慢的问题
node如何部署和nginx怎么连接,安全性怎么样
vue+node
1. 异步IO原理浅析
a. 异步IO的好处
前端通过异步IO可以消除UI的堵塞
IO是昂贵的,异步IO是更昂贵的,那不是减缓了速度了吗
NodeJS适用于IO密集型,而不是CPU密集型,Libuv做轮询,异步内存泄露
Libuv是nodejs的内部事件轮询机制,用来支持window和Linux
node接收请求后,将请求放到libuv中,libuv开启事件轮询 (event loop),轮询根据系统的不同启用不同的机制,Linux是Thread pool,windows是IOCP,事件完成后执行callback函数,将数据推送到前台,
cluster 和 fork 的区别
cluster是都是主的
fork是拷贝策略的
底层知识:
CPU的时钟周期,1/cpu主频 -> 1s/2.7 GHz,时钟周期指的是计算的时间间隔
2. 几个特殊的API
a. setTimeout 和setInterval不参与线程池
b. process.nextTick()实现类似,
c. setImmediate() 比process.nextTick()优先级低
d. Node如何实现一个sleep
async function test(){
console.log('hello');
await sleep(1000);
console.log('world');
}
function sleep(ms){
return new Promise(resolve => setTimeout(resolve,ms))
}
test();
3. 函数式编程在Node中的应用
高阶函数,将函数作为输入或者返回值,形成一种后续传递风格的结果接受方式,而非单一的返回值形式。后续传递风格的程序将函数业务重点从返回值传递到回调函数中。
app.use(function(){})
var emitter = new events.EventEmitter;
emitter.on('', function(){})
偏函数(柯里化),指定部分参数产生一个新的定制函数的形式就是偏函数。
就是生成一个函数,然后返回一个函数
var currying = function(fn) { // fn 指官员消化老婆的手段 var args = [].slice.call(arguments, 1); // args 指的是那个合法老婆 return function() { // 已经有的老婆和新搞定的老婆们合成一体,方便控制 var newArgs = args.concat([].slice.call(arguments)); // 这些老婆们用 fn 这个手段消化利用,完成韦小宝前辈的壮举并返回 return fn.apply(null, newArgs); }; };
4. 常用的node控制异步技术手段
step、wind、bigpipe、Q.js
async await
promise/defferred是一种先执行异步调用,延迟传递的处理方式。promise是高级接口,事件是低级接口。低级接口可以构建更多复杂的场景,高级接口一旦定义不太容易变化,不再有低级接口的灵活性,但对于解决问题非常有效。
https://www.cnblogs.com/kazetotori/p/6043983.html
采用方法的先后顺序 async/await promise 事件 回调函数
进程 一个应用程序是一个进程,进程可以有多线程
一个程序包含多个协程,就像一个进程包含多个线程。多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。
https://www.cnblogs.com/kex1n/p/7425972.html
http://cnodejs.org/topic/58ddd7a303d476b42d34c911
协程我的理解,协程包含到线程里,一个线程包含多个协程,就是采用promise的异步操作就会生成一个协程。
5. node的内存管理和优化
a. v8垃圾回收机制
node使用内存是有限制的,这主要取决于v8的来源,64位系统能使用1.4G,32位系统是0.7G。当然这个也是可以配置的
在node启动的时候传入参数