Nodejs中的非同步到底是優勢還是劣勢?

用JS(Nodejs)寫伺服器端,如果非同步是優勢的話,為什麼ES6和ES7都在解決非同步問題?


當然是優勢,ES6,7解決的是非同步語法上的缺陷。

之前的Nodejs有一套效率出色的IO模型,但卻沒有與之匹配的描述語法,新一代規範主要解決的是這個問題。


Node.js一直都標榜自己是non-blocking I/O,不標榜自己是Asynchronous I/O。

所以非同步I/O並不是說Node.js的特色,非阻塞才是。

那麼為什麼Node.js選擇用非同步I/O(這種編程模型)來表達非阻塞I/O呢,我認為,根本原因是,JS這門語言在那個時間點上沒有成熟的同步非阻塞體系,只有非同步非阻塞體系,這是沒的選的問題,不是選什麼的問題。

如果要我說非同步是優勢還是劣勢,那我當然覺得是劣勢,因為編程麻煩。所以當一部分人提前體會到async/await有多爽以後,都在紛紛號召快點進標準草案。畢竟俗話說,貓一旦嘗過魚腥就不會再肯吃別的。


其實只是採用回調方式的非同步編程方法是劣勢

為啥這麼實現的呢

就是因為簡單啊

連我這樣的二貨都能包出來的API

可見node作者的水平……

跟響馬大叔沒得比


建議樓主看一下unix網路編程裡面定義的幾種io模型。


通常討論的優勢或劣勢需要有一個指定的場景,在某些場景下非同步是優勢,在某些場景下非同步是劣勢。

回到你的問題,「非同步」本身無所謂是優勢還是劣勢,只有在指定場景下才有討論意義。但「Node.js 中的非同步」因為既可以寫成非同步方式(標準),也可以寫成同步方式(ES6/ES7),所以相對於「其他語言只能使用同步」來說是優勢。


是不是優勢,我想評論已經給出了。

為什麼都在修復,原因很簡單,原來的非同步嵌套太多費腦。node官方怕我們智商不夠用。


沒有優劣,取決於你的使用場景。node不使用運算量處理過大的需求(大批量的實時處理還是給後台解決)


推薦閱讀:

為什麼 Node.js 不給每一個.js文件以獨立的上下文來避免作用域被污染?
使用markdown製作的html幻燈片有哪些?
GitHub上有哪些值得關注學習的NodeJS開源項目?
為什麼nodejs的module.js里用了readFileSync而不用readFile?
前端小白迷茫,求指導?

TAG:Nodejs | ECMAScript2015 | nodej |