如何將Node與現(xiàn)有的架構(gòu)融合以面對(duì)新的無(wú)線場(chǎng)景,并更好地提升開(kāi)發(fā)效率,我們主要闡述了在當(dāng)前成熟的體系下向Node演進(jìn)的一個(gè)思緒,當(dāng)然這并不是唯-途徑。也有很多程序員討論能否要將后端的Java體系全部交流為Node體系,這就觸及Java技術(shù)棧和Node技術(shù)棧的比較,以下是筆者關(guān)于該問(wèn)題的思索。
我們從言語(yǔ)特性、開(kāi)發(fā)效率和本錢要素三個(gè)方面比較Java與作為后來(lái)者的Node。
1.言語(yǔ)特性
Javascript作為Node上運(yùn)轉(zhuǎn)的言語(yǔ),和Java相比,優(yōu)缺陷很明顯。Javascript 語(yǔ)法簡(jiǎn)單,很容易編寫(xiě)基于事情的驅(qū)動(dòng)的完成,但是Javascript 基于面向?qū)ο蟮拿璁?huà)才干偏弱,不像Java是真正的面向?qū)ο笱哉Z(yǔ),同時(shí)Javascript對(duì)數(shù)據(jù)類型的定義也比較單一,要么是數(shù)值類型要么是字符類型。很明顯,Java 更擅長(zhǎng)構(gòu)建復(fù)雜邏輯的大型應(yīng)用程序。在言語(yǔ)運(yùn)轉(zhuǎn)效率上,Javascript 原本是解釋執(zhí)行,Java是編譯執(zhí)行,但由于Node做了優(yōu)化,所以兩者運(yùn)轉(zhuǎn)效率差別不大。
2.開(kāi)發(fā)效率
開(kāi)發(fā)效率可以從言語(yǔ)的復(fù)雜度、程序員培育、開(kāi)發(fā)工具包的豐厚性以及編碼效率幾個(gè)方面比較。
●言語(yǔ)的復(fù)雜度。從開(kāi)發(fā)角度來(lái)看,Java和Javascript都不需求關(guān)心內(nèi)存的管理,都是基于虛擬機(jī)來(lái)管理內(nèi)存;從并發(fā)角度來(lái)看, Javascript是基于事情觸發(fā)的,而Java是基于線程的,因此Javascript更占優(yōu)勢(shì);此外,Javascript是無(wú)阻塞IO的,在I/O效率上比Java有優(yōu)勢(shì)(固然Java8也將更好地支持異步I/O)。
●程序員培育。目前Java 言語(yǔ)仍然是僅次于C言語(yǔ)的第二大編程言語(yǔ),而Javascript排在第10位,Java 程序員隊(duì)伍要比Javascript大很多,很顯然招聘Java程序員要比招聘Javascript程序員更容易。
●開(kāi)發(fā)工具包。很多時(shí)分-個(gè)言語(yǔ)的開(kāi)發(fā)效率要看這個(gè)言語(yǔ)的支持工具包和組件的豐厚性,Java 經(jīng)過(guò)這么多年的展開(kāi),工具類庫(kù)曾經(jīng)非常豐厚,幾乎任何你想要的工具類庫(kù)都能在網(wǎng)上找到。Javascript 固然也展開(kāi)了很長(zhǎng)時(shí)間,但是基于Javascript的工具類庫(kù)主要集中在前端,能夠直接用于Node的仍然很少。當(dāng)然Node的社區(qū)非常生動(dòng),可以預(yù)見(jiàn)Node的工具類庫(kù)增長(zhǎng)也會(huì)非常疾速。但是要抵達(dá)Java的范圍尚需時(shí)日。
●編碼效率。Java 言語(yǔ)的運(yùn)轉(zhuǎn)基于JVM,但是Java的部署效率稍差; Javascript使測(cè)試愈加簡(jiǎn)單,但是debug機(jī)制仍然不完善。
3.本錢要素
前面主要是從技術(shù)角度思索,但是假設(shè)要從成熟的Java體系遷移到Node,本錢也是一個(gè)重要的思索要素。
首先是學(xué)習(xí)本錢。假設(shè)公司大部分是Java程序員,往常要遷住Node,很明顯這個(gè)學(xué)習(xí)本錢會(huì)非常龐大,即使這個(gè)遷移是漸進(jìn)式的,長(zhǎng)期來(lái)看仍然是要將一部分Java程序員交流成 Javascript程序員。先不管程序員是公司內(nèi)部培育的還是從外部招聘的我們都可以算一下公司招聘一名程序員的本錢有多大:一名普通工程師的年薪假定為10萬(wàn)元,獵頭費(fèi)普通是年薪的20%以上,也就是2萬(wàn)元、再加上一個(gè)月的實(shí)習(xí)本錢1萬(wàn)元,加在一同約3萬(wàn)元。這關(guān)于有1萬(wàn)名以上開(kāi)發(fā)人員的大公司而言,人力本錢不可思議。假設(shè)招聘應(yīng)屆生,由于應(yīng)屆生的培育周期更長(zhǎng),學(xué)習(xí)本錢會(huì)更高。
其次是環(huán)境本錢。公司的基礎(chǔ)效勞產(chǎn)品如中間件是基于Java開(kāi)發(fā)的,假設(shè)要交流成 Javascript,必然要再另外開(kāi)發(fā),還得開(kāi)發(fā)配套的運(yùn)維工具等,這個(gè)本錢也不可思議。最后是維護(hù)本錢。Java和 Javascript i都是基于容器運(yùn)轉(zhuǎn)的,和V8引擘相比,程序員顯然對(duì)JVM更熟習(xí)。另外,從排查詢題的難易程度來(lái)看,針對(duì)JM的工具顯然更完善。
4.人的要素
關(guān)于一家成熟的公司而言,假定現(xiàn)有的Web系統(tǒng)都改用Node完成、必然會(huì)有很多Java工程師要從事Node的開(kāi)發(fā),由于已有的前端工程師人數(shù)肯定支撐不了現(xiàn)有業(yè)務(wù)的展開(kāi)。我們假定一部分Java工程師愿意學(xué)習(xí) Javascript并成為全棧工程師,那么他們能否也愿意用兩種不同的言語(yǔ)完成同一個(gè)任務(wù)呢?正常來(lái)說(shuō),假設(shè)能用同一個(gè)任務(wù)分紅神不同的方式來(lái)完成的必要性就會(huì)大打折扣。所以從這些角度來(lái)看,要讓一家很成熟的公司切換言語(yǔ)是非常困難的。
固然交流技術(shù)棧很困難,但是無(wú)論如何都應(yīng)該統(tǒng)一技術(shù)棧,特別是主流的網(wǎng)站樹(shù)立業(yè)務(wù)開(kāi)發(fā),更應(yīng)該運(yùn)用統(tǒng)一的技術(shù)棧這就像秦始皇統(tǒng)一言語(yǔ)一樣所帶來(lái)的好處顯而易見(jiàn)。
更多精彩請(qǐng)關(guān)注:http://www.www25673.cn