5種用于前端開發(fā)的JavaScript替代方案
JavaScript雖然是很受歡迎的語(yǔ)言,但是并不適合所有人,那么有哪些替代方案呢?本文將分析5種JavaScript替代方案。
1995年,Netscape(網(wǎng)景通信公司)聘請(qǐng)Brendan Eich為當(dāng)時(shí)最受歡迎的網(wǎng)絡(luò)瀏覽器Netscape Navigator添加一種新語(yǔ)言。Netscape希望增強(qiáng)網(wǎng)絡(luò)的可編程性。
LiveScript在1995年末發(fā)布了測(cè)試版的瀏覽器,并在最終發(fā)布前改名為JavaScript,以利用Netscape與Sun Microsystems的合作關(guān)系,后者是流行的Java語(yǔ)言背后的公司(盡管JavaScript本質(zhì)上與Java沒有任何關(guān)系)。
Mozilla的創(chuàng)始人之一是Eich,他在10天內(nèi)開發(fā)出了JavaScript的原始版本。在接下來(lái)的25年里,JavaScript從一種不受歡迎且受到嚴(yán)重限制的語(yǔ)言發(fā)展成為現(xiàn)代web應(yīng)用程序構(gòu)建的強(qiáng)大基礎(chǔ)。如今,JavaScript主導(dǎo)了瀏覽器,并通過(guò)Node.js占領(lǐng)了大部分服務(wù)器。
然而,JavaScript并不是所有開發(fā)人員都喜歡的語(yǔ)言。Eich在早期做出了一些古怪的決定,這些決定一直持續(xù)到2019年,其中包括典型的繼承、“this”以及JavaScript的侵略性和不一致的類型強(qiáng)制。
近年來(lái),開發(fā)人員已經(jīng)創(chuàng)建了JavaScript的替代品。JavaScript仍然是在瀏覽器中運(yùn)行的唯一語(yǔ)言,因此這些新語(yǔ)言主要是編譯或轉(zhuǎn)換為JavaScript。CoffeeScript是第一個(gè)類似的腳本,但很快就被眾多競(jìng)爭(zhēng)對(duì)手所超越,每個(gè)競(jìng)爭(zhēng)對(duì)手都對(duì)JavaScript進(jìn)行了改進(jìn)。
Dart
Dart是一種面向?qū)ο蟮腸語(yǔ)言,由Google創(chuàng)建,作為JavaScript的替代品。它拋棄了JavaScript的原型繼承系統(tǒng),而采用了更傳統(tǒng)的面向?qū)ο蟮姆椒ǎ魏问褂眠^(guò)Java或c++的人都熟悉這種方法。與JavaScript不同,Dart是一種靜態(tài)類型的語(yǔ)言,消除了JavaScript代碼中的常見錯(cuò)誤源。Dart支持類型推斷,因此沒有必要在每次聲明變量或函數(shù)時(shí)都包含類型樣板。
也許Dart最令人激動(dòng)的功能是它在網(wǎng)絡(luò)之外的可用性。Dart代碼可以轉(zhuǎn)換為JavaScript以便在瀏覽器中運(yùn)行,但它也可用于獨(dú)立應(yīng)用程序和服務(wù)器端開發(fā)。Google的Flutter UI工具包是一個(gè)可移植的前端框架,可用于桌面、移動(dòng)設(shè)備和Web,構(gòu)建本機(jī)應(yīng)用程序。
TypeScript
TypeScript是微軟向更好的JavaScript進(jìn)軍的第一步。與Dart不同,TypeScript不是一種全新的語(yǔ)言,而是JavaScript的超集。TypeScript編譯器可以編譯有效的JavaScript,但是TypeScript增加了幾個(gè)新特性,改進(jìn)和現(xiàn)代化了JavaScript的限制,其中最重要的是一個(gè)可選的類型系統(tǒng)。
許多JavaScript問(wèn)題都是由于缺少靜態(tài)類型導(dǎo)致的,這導(dǎo)致了編譯器在運(yùn)行前進(jìn)行檢查時(shí)就被限制了。顧名思義,TypeScript實(shí)現(xiàn)了一種類型表示法,開發(fā)人員可以使用這種表示法為web應(yīng)用程序編程保證安全。與Dart一樣,TypeScript支持類型推斷。
值得一提的是,TypeScript比它的競(jìng)爭(zhēng)對(duì)手谷歌更受歡迎。比如,雖然Angular是谷歌的項(xiàng)目,但它的框架是用TypeScript開發(fā)的。TypeScript也可以與React和Vue一起使用。
Elm
Dart和TypeScript與JavaScript和C. Elm有明顯的親緣關(guān)系。它是一種靜態(tài)類型的函數(shù)語(yǔ)言,與Haskell相比更類似于C,但沒有Haskell那種令人撓頭的復(fù)雜性。
Elm本質(zhì)上是一種用于構(gòu)建web前端的特定于領(lǐng)域的語(yǔ)言。
Elm不像JavaScript那樣是一種通用語(yǔ)言,相反,創(chuàng)建者Evan Czaplicki專注于構(gòu)建最好的前端web應(yīng)用程序開發(fā)體驗(yàn)。Elm的主要優(yōu)點(diǎn)是,通過(guò)靜態(tài)類型和不可變值消除了前端代碼中的許多潛在bug。Elm宣稱自己是一種“在實(shí)踐中沒有運(yùn)行異常”的語(yǔ)言,這意味著如果一個(gè)Elm程序運(yùn)行,它就不太可能在生產(chǎn)中遇到阻止性能的bug。
以下是Elm代碼示例

Elm代碼看起來(lái)和JavaScript一點(diǎn)也不像,但是它有簡(jiǎn)單直觀的語(yǔ)法,Elm對(duì)學(xué)習(xí)過(guò)JavaScript的人來(lái)說(shuō)應(yīng)該不難。
ClojureScript
ClojureScript是Clojure編程語(yǔ)言的一個(gè)版本,可以編譯為JavaScript。Clojure是運(yùn)行在Java虛擬機(jī)上的Lisp。與Elm一樣,Clojure也是一種函數(shù)性語(yǔ)言,具有不可變的數(shù)據(jù)類型。與Elm不同,它是一種通用編程語(yǔ)言,可以在后端與JVM一起使用,也可以通過(guò)JavaScript在前端使用。

與所有Lisp一樣,Clojure是用括號(hào)分隔的s表達(dá)式編寫的。用Clojure的創(chuàng)建者Rich Hickey的話來(lái)說(shuō),ClojureScript試圖用Clojure(簡(jiǎn)潔且功能強(qiáng)大的編程語(yǔ)言)取代JavaScript,從而解決客戶機(jī)/嵌入式應(yīng)用程序開發(fā)中的薄弱環(huán)節(jié)。Clojure可以與React和其他流行的JavaScript框架一起使用。
當(dāng)Netscape雇用Brendan Eich時(shí),他們計(jì)劃將Scheme集成到Navigator中,而不是創(chuàng)建一種新的語(yǔ)言。Scheme是一種Lisp,因此,如果歷史的發(fā)展稍微有些不同,Lisp可能已經(jīng)成為世界上最流行的編程語(yǔ)言家族。JavaScript通過(guò)一流的函數(shù)、閉包和lambdas保留了一些“Lispiness”。在JavaScript開發(fā)過(guò)程中扮演關(guān)鍵角色并發(fā)明了JSON的道格拉斯•克羅克福德(Douglas Crockford)將JavaScript稱為“披著C外衣的Lisp”。
Phoenix LiveView
之前講過(guò)的語(yǔ)言可以編譯成JavaScript,它們讓開發(fā)人員無(wú)需編寫JavaScript就可以構(gòu)建客戶端應(yīng)用程序。
Phoenix LiveView與眾不同。Phoenix是一個(gè)用相對(duì)較新的Elixir編程語(yǔ)言編寫的web框架。Phoenix是一個(gè)服務(wù)器端框架。但我們?yōu)槭裁匆谝黄獙iT討論瀏覽器JavaScript替代方案的文章中討論它呢?因?yàn)長(zhǎng)iveView可以在許多web開發(fā)場(chǎng)景中替代JavaScript。
Phoenix的創(chuàng)建者Chris McCord稱LiveView是“一個(gè)令人振奮的新庫(kù),它支持使用服務(wù)器呈現(xiàn)HTML,實(shí)現(xiàn)豐富的實(shí)時(shí)用戶體驗(yàn)”。LiveView使用Phoenix channel在瀏覽器和服務(wù)器之間創(chuàng)建雙向連接。LiveView基于Websockets,可以在不編寫JavaScript的情況下創(chuàng)建交互體驗(yàn)。人們自然會(huì)擔(dān)心這種方法太慢而無(wú)法使用,但是LiveView的設(shè)計(jì)目的是最小化數(shù)據(jù)傳輸,并且在實(shí)踐中可以用于構(gòu)建低延遲接口。
但LiveView有局限性,我們不建議在LiveView中構(gòu)建像Google Docs這樣的復(fù)雜應(yīng)用程序。如果離線功能對(duì)應(yīng)用程序很重要,那么LiveView也不是合適的解決方案。但是,對(duì)于表單、實(shí)時(shí)界面更新和數(shù)據(jù)驗(yàn)證等功能,Phoenix LiveView是JavaScript的可行替代方案。它比大多數(shù)JavaScript應(yīng)用程序小得多;,LiveView的瀏覽器代碼大約是React的四分之一。
總結(jié)
我們已經(jīng)研究了JavaScript的五種替代方法,每種方法都提供了一種創(chuàng)建Web應(yīng)用程序和交互式界面的不同方式。當(dāng)然目前大部分人使用的依然是JavaScript,因?yàn)樗荳eb瀏覽器支持的唯一語(yǔ)言。
但隨著WebAssembly被廣泛采用,這種情況可能即將發(fā)生變化。所有主流瀏覽器都支持WebAssembly,將來(lái)它很可能成為面向Web的語(yǔ)言的默認(rèn)編譯目標(biāo)。對(duì)于Web開發(fā)人員來(lái)說(shuō),探索WebAssembly的可能性是個(gè)很不錯(cuò)的方向。