首先 nodejs并不是一門新的語言,他的作用主要在于后臺(tái)。
接觸過前端的都知道 前端無非就是 html,css,js 以及各種框架和這些語言的升級版本。
js在前端的作用除了一些動(dòng)態(tài)效果就是與后臺(tái)交互,比方說ajax。
但是在nodejs還沒有出現(xiàn)的時(shí)候 js除了在前端能與后臺(tái)做一些交互之外,其余的在后臺(tái)就差不多看不見js的影子了。也有很多人對這個(gè)語言感到不甘,他有很強(qiáng)的處理能力,卻在后臺(tái)無法生存。直到nodejs的出現(xiàn)。
nodejs時(shí)基于js語法的一款運(yùn)行在后臺(tái)的javascript語言。
主要特點(diǎn)是單線程,采用非阻塞時(shí)I/O,事件驅(qū)動(dòng)。
從以上三點(diǎn)分析nodejs優(yōu)缺點(diǎn)的話:
其單線程一定程度的節(jié)省資源與內(nèi)存,這時(shí)候就有人問到了,一個(gè)線程,能有什么用,nodejs不僅僅是單線程,它的基本操作全都是異步操作,這樣就保證了,一個(gè)線程里,同時(shí)進(jìn)行多種進(jìn)程。
采用非阻塞制I/O 可以大大的加快nodejs的執(zhí)行效率 這樣可以更好的執(zhí)行異步操作,不會(huì)因?yàn)槟硞€(gè)進(jìn)程的執(zhí)行時(shí)間教程,從而耽誤了整個(gè)進(jìn)程。
采用事件驅(qū)動(dòng)的執(zhí)行方法,主要是用了大量的回調(diào)函數(shù),這樣可以大大的減少異步操作所帶了錯(cuò)誤,比方說進(jìn)程b是基于進(jìn)程a完成之后才能執(zhí)行的 而異步操作不會(huì)去管a有沒有完成 就會(huì)去執(zhí)行b這時(shí)候把b封裝成一個(gè)回調(diào)函數(shù)放入a中回調(diào),這樣就達(dá)到了a執(zhí)行結(jié)束之后再去執(zhí)行b 而且還不會(huì)耽誤其他的進(jìn)程。
如果從以上三點(diǎn)分析nodejs的缺點(diǎn)的話 單線程差不多是最大的缺點(diǎn)了 因?yàn)闀r(shí)單線程 一根線 其中一個(gè)進(jìn)程崩了,就會(huì)導(dǎo)致整個(gè)線程坍塌,導(dǎo)致所有的進(jìn)程全部無法進(jìn)行。
除了從以上三點(diǎn)分析nodejs的優(yōu)缺點(diǎn) 我們還可以從前后端的角度 分析nodejs的優(yōu)點(diǎn)(缺點(diǎn)我這里就不描述了):
對于前端開發(fā)者來說 nodejs無疑是對于他們非常好的一種語言,因?yàn)閚odejs的語法就是js語法,這讓前端開發(fā)者非常容易學(xué)會(huì),以及掌握。
對于后端來說,nodejs和前端交互的時(shí)候,省去了大量的代碼互相融合交互的工作,還是因?yàn)榇a的語法都一樣,前后很容易認(rèn)識(shí)。
以上就是nodejs宏觀上,大概的優(yōu)缺點(diǎn),還有很多細(xì)節(jié)需要在實(shí)際操作中去自己發(fā)掘,自己嘗試。
還有就是,學(xué)習(xí)nodejs必須要掌握的框架 express koa jquery 以及vue.js.?
掌握一些es6語法 對于玩轉(zhuǎn)nodejs也是有很大幫助。