在 Node 的幫助下,橫跨多平臺(tái)的 JavaScript 已經(jīng)贏了
編者按:很多人都在尋找一個(gè)能夠統(tǒng)一編程語(yǔ)言江湖的“老大哥”,戰(zhàn)火也重來(lái)沒(méi)有停止過(guò)。 Jonny Asmar 在 hackernoon上發(fā)表了一篇文章 指出,因?yàn)镹ode的存在,JavaScript具備了多功能性,已經(jīng)有了坐穩(wěn)“頭把交椅”的勢(shì)頭。文章由36氪編譯。
作者寫在前面的話:這篇文章已經(jīng)引起了大量的反對(duì),因?yàn)楹芏嗳瞬⒉徽J(rèn)為JavaScript是編程語(yǔ)言中的勝利者。
盡管我承認(rèn),我的標(biāo)題可能會(huì)引起爭(zhēng)議,可能會(huì)更加讓人有點(diǎn)擊欲望。但我還是想強(qiáng)調(diào),這篇文章并不是說(shuō)JS是“***”的語(yǔ)言。
我只是在文章中簡(jiǎn)單地描述了它所覆蓋的領(lǐng)域,以及它能夠讓簡(jiǎn)單的前端開發(fā)人員做更多事情的方法。
在編程的世界里,有一場(chǎng)曠日持久的戰(zhàn)爭(zhēng)。自從計(jì)算機(jī)問(wèn)世以來(lái),科學(xué)家們一直在尋找一種***的編程語(yǔ)言。一個(gè)接一個(gè)的新語(yǔ)言被創(chuàng)造出來(lái),以適應(yīng)某種目的。隨著新語(yǔ)言的出現(xiàn),也會(huì)出現(xiàn)新的技術(shù)時(shí)代,新的技術(shù)社區(qū),和大量的開源貢獻(xiàn)。當(dāng)然還會(huì)有不可避免的新的限制。自從在Java應(yīng)用程序和Flash(我曾經(jīng)是Flash開發(fā)者)在互聯(lián)網(wǎng)上長(zhǎng)期占據(jù)主導(dǎo)地位以來(lái),我們已經(jīng)看到有各種各樣的語(yǔ)言的涌現(xiàn),各種各樣的語(yǔ)言毫無(wú)理由的消失,因?yàn)樗鼈円呀?jīng)毫無(wú)用武之地。
世界正在朝著不同的方向前進(jìn)……
那些曾經(jīng)耀眼的新語(yǔ)言現(xiàn)在已經(jīng)過(guò)時(shí)了,開發(fā)者越來(lái)越少,而新的語(yǔ)言也開始制造噪音。
到現(xiàn)在,JavaScript已經(jīng)有幾十年的歷史了。所以,你可能會(huì)想,“它將會(huì)到何處去?”這篇文章其實(shí)不是關(guān)于“JavaScript”語(yǔ)言的。也不會(huì)去討論在它之前許多語(yǔ)言的崛起和衰落。同時(shí),也不是關(guān)于JavaScript是如何“新鮮有光澤”的。
這篇文章是關(guān)于Node的。
真的很有必要,在一開始就區(qū)分這一點(diǎn)。 因?yàn)镹ode不只是一種語(yǔ)言。而是一個(gè)生態(tài)系統(tǒng)。
這就是這篇文章的主旨。
不過(guò)也不完全是這樣。我不打算詳細(xì)講述這個(gè)生態(tài)系統(tǒng)是世界上有史以來(lái)***創(chuàng)新性的開源合作的推動(dòng)者。這是另一個(gè)的話題。
我要說(shuō)明的是,Node是如何通過(guò)遍歷現(xiàn)代編程的五個(gè)關(guān)鍵領(lǐng)域,贏得了一場(chǎng)關(guān)于***語(yǔ)言的古老戰(zhàn)爭(zhēng)的。
Web開發(fā)
React、Angular、Vue
React、Angular和Vue都是當(dāng)今最重要的前端框架??偟膩?lái)說(shuō),F(xiàn)acebook,Google和FOSS社區(qū)共同開發(fā)出了一種令人興奮的開發(fā)交互式用戶界面的高效工具。
因此,現(xiàn)在你在網(wǎng)絡(luò)上做的所有事情都是通過(guò)一個(gè)高度互動(dòng)、美觀、易用的界面來(lái)實(shí)現(xiàn)的。這些框架之所以能夠完全實(shí)現(xiàn),完全是因?yàn)镹ode生態(tài)系統(tǒng),你已經(jīng)知道了。
你看,毫無(wú)疑問(wèn),JavaScript在前端Web開發(fā)中占據(jù)了主導(dǎo)地位,但React,Angular和Vue已經(jīng)將它提升到了一個(gè)新的高度。
這是用戶界面的時(shí)代。
前端開發(fā)人員不再回避構(gòu)建復(fù)雜的單頁(yè)面Web應(yīng)用程序和完整的軟件套件的時(shí)代。我曾經(jīng)是一名Web開發(fā)人員,現(xiàn)在我是一名軟件開發(fā)人員。
就這樣……JavaScript贏得了Web開發(fā)。
移動(dòng)開發(fā)(Mobile)
React Native
這一部分不僅只是闡述Node在Mobile領(lǐng)域的成功,還將提出另一個(gè)關(guān)鍵問(wèn)題:
Node是跨平臺(tái)的。
這不僅僅是“哦,酷,它也能在我的手機(jī)上工作!”,也不僅僅是“哇,我的手機(jī)、平板電腦、筆記本電腦和電視都可以使用YouTube!”。
Node跨平臺(tái)的方式是最重要的。對(duì)于開發(fā)者來(lái)說(shuō),這是一個(gè)真正的跨平臺(tái)生態(tài)系統(tǒng)。那些真正建立起“噢,酷”和“哇”的東西的人都喜歡這個(gè)。
React Native只是Node生態(tài)系統(tǒng)中開發(fā)的框架的一個(gè)例子,它以***的方式彌合了前端開發(fā)和移動(dòng)應(yīng)用開發(fā)之間的鴻溝,這是其他任何框架都沒(méi)有的。
移動(dòng)開發(fā)的***壓力一直是Web的拉動(dòng)。但是,通過(guò)React Native和Node生態(tài)系統(tǒng),開發(fā)者可以構(gòu)建一個(gè)兼容Web、iOS和Android的應(yīng)用。沒(méi)有其他語(yǔ)言能提供這種多功能性。
就這樣……JavaScript贏得了移動(dòng)開發(fā)。
桌面開發(fā)(Desktop)
Electron
當(dāng)然,并不是所有的事情都發(fā)生在Web上。桌面應(yīng)用程序?qū)τ谖覀儺?dāng)前這個(gè)依賴技術(shù)的世界的運(yùn)營(yíng)中也至關(guān)重要。
但是,既然Web現(xiàn)在能夠提供功能齊全的應(yīng)用程序,為什么我們還要開發(fā)桌面軟件,并對(duì)其進(jìn)行不同的處理呢?
實(shí)際上,JavaScript趕上桌面端的性能需求,只是個(gè)時(shí)間問(wèn)題。
所以,Electron誕生了。
當(dāng)然,在桌面編程的時(shí)候,還有更高效的語(yǔ)言可以使用,但對(duì)于我們今天使用的大多數(shù)應(yīng)用程序來(lái)說(shuō),JavaScript已經(jīng)足夠了。
多虧了Cheng Zhao和Github,創(chuàng)建了一個(gè)能夠改變桌面計(jì)算面貌的框架。
Electron不僅讓桌面應(yīng)用程序的開發(fā)變得更加簡(jiǎn)單,而且也能兼容Mac, Windows和Linux,它構(gòu)建的應(yīng)用可在這三個(gè)操作系統(tǒng)上面運(yùn)行。
雖然Windows仍然是當(dāng)今最普及的操作系統(tǒng),Mac的穩(wěn)定增長(zhǎng)已經(jīng)持續(xù)了15年,越來(lái)越多的開發(fā)者每天都在使用Linux。此外,像樹莓派這樣的小玩具也會(huì)讓Linux出現(xiàn)在許多以前只有windows或Mac的家庭中。我認(rèn)為你可以理解為什么跨操作系統(tǒng)的開發(fā)會(huì)具有巨大的優(yōu)勢(shì)……而這僅僅是個(gè)開始。
截止到現(xiàn)在,Node生態(tài)系統(tǒng)已經(jīng)能夠完全覆蓋Web開發(fā)、移動(dòng)開發(fā)和桌面開發(fā)。提供了一個(gè)能夠在這些所有的平臺(tái)建立相同用戶界面的技能組合。
就這樣……JavaScript贏得了桌面開發(fā)。
后端開發(fā)
ExpressJS
我不想在這里介紹NPM(節(jié)點(diǎn)包管理器)上提供的無(wú)數(shù)軟件包,這些包可以方便后端開發(fā),因此,我只會(huì)提到Express sjs,有一個(gè)簡(jiǎn)單但深刻的理由:
Node是為后端而構(gòu)建的。
而且,Node生態(tài)系統(tǒng)中的JavaScript已經(jīng)成為了一種多用途的工具,已經(jīng)被用于開發(fā)自己的服務(wù)器應(yīng)用程序。在Node創(chuàng)建之前,JavaScript基本上只支持瀏覽器。它不需要執(zhí)行復(fù)雜的服務(wù)器端操作,如數(shù)據(jù)庫(kù)讀取、圖像轉(zhuǎn)換或壓縮。但現(xiàn)在它可以……
而且,正如以上幾個(gè)例子一樣,這種對(duì)代碼共享和重用顯著的簡(jiǎn)化也產(chǎn)生了一些明顯的副作用。
其中一個(gè)副作用就是服務(wù)器端渲染。
你get到了嗎?
服務(wù)器端
渲染
這兩件事有什么共同點(diǎn)?
傳統(tǒng)意義上來(lái)說(shuō),沒(méi)什么。但“前端”(JavaScript)或“后端”(PHP、Java、Python、Ruby等)的開發(fā)通常是由兩個(gè)完全獨(dú)立的團(tuán)隊(duì)來(lái)維護(hù)。
兩個(gè)團(tuán)隊(duì)的人非常不同。
但現(xiàn)在不再是了!
感謝Node,我們現(xiàn)在能夠在用戶的瀏覽器需要渲染一件東西之前,在服務(wù)器端組裝復(fù)雜的用戶界面。這就是為什么現(xiàn)在Web如此時(shí)髦的原因。因?yàn)镹ode已經(jīng)消除了后端和前端之間的界限。
就這樣……JavaScript贏得了后端開發(fā)。
游戲開發(fā)
Unity 3D
我把這個(gè)放到了***,因?yàn)樗⒉皇钦嬲?ldquo;Node”,而是JavaScript的東西,我想稍微寬泛一些:
JavaScript的成功不是因?yàn)樗鼉?yōu)于其他語(yǔ)言。它的成功是一個(gè)直接的結(jié)果,它對(duì)幾乎每個(gè)社區(qū)都能夠適應(yīng)。
JavaScript開發(fā)者并非純粹主義者。
我們喜歡我們的語(yǔ)言(不是),版本分散、依賴于轉(zhuǎn)譯、跨平臺(tái)、前沿、不斷發(fā)展,以及以前沒(méi)有語(yǔ)言的地方。
就像游戲開發(fā)!
當(dāng)Unity 3D***推出基于JavaScript的“UnityScript”作為游戲開發(fā)工具的時(shí)候,我當(dāng)時(shí)就意識(shí)到,JavaScript將會(huì)做一些非常酷的事情。這是該公司***進(jìn)軍非Web開發(fā)領(lǐng)域。
這是一個(gè)明確的跡象,表明JavaScript可以做的不僅僅是打開“飛出”菜單,在頁(yè)面上調(diào)整字體大小。它可以做更多的事情,讓你給這篇文章或者一張圖片點(diǎn)贊。它可以處理沉浸式的跨平臺(tái)游戲體驗(yàn)。那些曾經(jīng)被限制在Chrome、Firefox和Internet Exploder的開發(fā)者,突然之間也成了一名游戲開發(fā)者。
雖然Unity最近宣布他們將不在支持UnityScript,但我還是要說(shuō):
就這樣……JavaScript贏得了游戲開發(fā)。
好吧,也許不是。
結(jié)語(yǔ)
我不知道這個(gè)征服會(huì)在什么時(shí)候停止,但Node正在瘋狂爆發(fā)。它正在顛覆一個(gè)又一個(gè)的發(fā)展難題,為一個(gè)軟件開發(fā)的世界鋪平了道路,在這個(gè)世界里,一種語(yǔ)言可以統(tǒng)治所有。我確實(shí)覺得我需要重申一下——以防被忽視:
在任何一個(gè)領(lǐng)域,JavaScript都不是***語(yǔ)言。
JavaScript的優(yōu)勢(shì)在于它的多功能性。它來(lái)自開放式的社區(qū),它采用了這種無(wú)分類、多態(tài)的腳本語(yǔ)言,并將其轉(zhuǎn)變?yōu)楫?dāng)今***大的開發(fā)生態(tài)系統(tǒng)。
如果你有不同的看法,歡迎在留言區(qū)互動(dòng)。
原文鏈接: https://hackernoon.com/javascript-has-already-won-235b29ed126b
編譯組出品。編輯:郝鵬程