什么是IO恨溜?
訪(fǎng)問(wèn)網(wǎng)站符衔,輸入地址吐出一個(gè)IO
前端通過(guò)異步IO可以消除UI堵塞
假設(shè)請(qǐng)求資源A的時(shí)間為M,請(qǐng)求資源B的時(shí)間為N糟袁。那么同步的請(qǐng)求耗時(shí)為M+NN,如果采用異步方式占用時(shí)間為Max(M,N)
隨著業(yè)務(wù)的復(fù)雜判族,會(huì)引入分布式系統(tǒng),時(shí)間回線(xiàn)性的增加项戴,M+N+... 和Max(M形帮,N···),這會(huì)放大同步和異步之間的詫異
I/O是昂貴的周叮,分布式I/O是更昂貴的
CPU時(shí)鐘周期:1/cpu主頻
根據(jù)情況選擇同步還是異步辩撑,沒(méi)有誰(shuí)最好;它們是相輔相成的仿耽。
NodeJS適用于IO密集型合冀,不適用CPU密集型
node雖然是單線(xiàn)程,但是有輔助線(xiàn)程项贺,
Libuv(需要會(huì)C的知識(shí))
封裝了window君躺、Linux操作系統(tǒng),用V8 node寫(xiě)的一個(gè)庫(kù)开缎。
有幾個(gè)特殊的API
1棕叫、setTimeout\setInterval 線(xiàn)程池不參與
2、process.nextTick() 實(shí)現(xiàn)類(lèi)似
setTimeout(function(){},0);每次調(diào)用放在隊(duì)列中啥箭,在下一輪循環(huán)中取出
3谍珊、setImmediate();比process.nextTick()優(yōu)先級(jí)低
4、Node如何實(shí)現(xiàn)一個(gè)Sleep?
async function test(){
console.log("hello");
await sleep(1000);
console.log("world!");
}
function sleep(ms){
return new Promise(resolve => setTimeout(resolve,ms))
}
test();
函數(shù)式編程在Node中的應(yīng)用
1急侥、高階函數(shù):可以將函數(shù)作為輸入或者返回值砌滞,形成一種后續(xù)傳遞風(fēng)格的結(jié)果接受方式,而非單一的返回值形式坏怪。后續(xù)傳遞風(fēng)格的程序?qū)⒑瘮?shù)業(yè)務(wù)重點(diǎn)從返回值傳遞到回調(diào)函數(shù)種贝润。
app.use(function(){//todo})
var emitter =new events.EventEmitter;
emitter.on(function(){//`````````.todo})
2、 偏函數(shù):指定部分參數(shù)產(chǎn)生一個(gè)新的定制函數(shù)的形式就是偏函數(shù)铝宵。Node中異步編程非常常見(jiàn)打掘,我們通過(guò)燒餅變量會(huì)很容易造成業(yè)務(wù)的混亂华畏。underscore,after變量