nodejs的缺點(diǎn):1、不適合CPU密集型應(yīng)用;2、只支持單核CPU,不能充分利用CPU;3、可靠性低;4、開源組件庫質(zhì)量參差不齊,更新快,向下不兼容;5、Debug不方便,錯(cuò)誤沒有stack trace。
本教程操作環(huán)境:windows7系統(tǒng)、nodejs 12.19.0版、Dell G3電腦。
Node.js本質(zhì)上是一個(gè)JavaScript的運(yùn)行環(huán)境。
Node.js是一個(gè)基于Chrome JavaScript運(yùn)行時(shí)建立的平臺(tái), 用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。Node.js使用事件驅(qū)動(dòng),非阻塞I/O 模型而得以輕量和高效,非常適合在分布式設(shè)備上運(yùn)行數(shù)據(jù)密集型的實(shí)時(shí)應(yīng)用。
nodejs的缺點(diǎn):
1、不適合CPU密集型應(yīng)用;
CPU密集型應(yīng)用給Node帶來的挑戰(zhàn)主要是:由于JavaScript單線程的原因,如果有長時(shí)間運(yùn)行的計(jì)算(比如大循環(huán)),將會(huì)導(dǎo)致CPU時(shí)間片不能釋放,使得后續(xù)I/O無法發(fā)起;
-
解決方案:分解大型運(yùn)算任務(wù)為多個(gè)小任務(wù),使得運(yùn)算能夠適時(shí)釋放,不阻塞I/O調(diào)用的發(fā)起;
2、只支持單核CPU,不能充分利用CPU
3、可靠性低,一旦代碼某個(gè)環(huán)節(jié)崩潰,整個(gè)系統(tǒng)都崩潰
-
原因:單進(jìn)程,單線程
4、開源組件庫質(zhì)量參差不齊,更新快,向下不兼容
5、Debug不方便,錯(cuò)誤沒有stack trace
適合NodeJS的場景
1. RESTful API
這是NodeJS最理想的應(yīng)用場景,可以處理數(shù)萬條連接,本身沒有太多的邏輯,只需要請求API,組織數(shù)據(jù)進(jìn)行返回即可。它本質(zhì)上只是從某個(gè)數(shù)據(jù)庫中查找 一些值并將它們組成一個(gè)響應(yīng)。由于響應(yīng)是少量文本,入站請求也是少量的文本,因此流量不高,一臺(tái)機(jī)器甚至也可以處理最繁忙的公司的API需求。
2. 統(tǒng)一Web應(yīng)用的UI層
目前MVC的架構(gòu),在某種意義上來說,Web開發(fā)有兩個(gè)UI層,一個(gè)是在瀏覽器里面我們最終看到的,另一個(gè)在server端,負(fù)責(zé)生成和拼接頁面。
不討論這種架構(gòu)是好是壞,但是有另外一種實(shí)踐,面向服務(wù)的架構(gòu),更好的做前后端的依賴分離。如果所有的關(guān)鍵業(yè)務(wù)邏輯都封裝成REST調(diào)用,就意味著在上層 只需要考慮如何用這些REST接口構(gòu)建具體的應(yīng)用。那些后端程序員們根本不操心具體數(shù)據(jù)是如何從一個(gè)頁面?zhèn)鬟f到另一個(gè)頁面的,他們也不用管用戶數(shù)據(jù)更新是 通過Ajax異步獲取的還是通過刷新頁面。
3. 大量Ajax請求的應(yīng)用
例如個(gè)性化應(yīng)用,每個(gè)用戶看到的頁面都不一樣,緩存失效,需要在頁面加載的時(shí)候發(fā)起Ajax請求,NodeJS能響應(yīng)大量的并發(fā)請求?! 】偠灾琋odeJS適合運(yùn)用在高并發(fā)、I/O密集、少量業(yè)務(wù)邏輯的場景。
【推薦學(xué)習(xí):《nodejs 教程》】