Nodejs中的非同步到底是優勢還是劣勢?
03-10
用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 |