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

Elm代碼看起來和JavaScript一點也不像,但是它有簡單直觀的語法,Elm對學習過JavaScript的人來說應該不難。
ClojureScript
ClojureScript是Clojure編程語言的一個版本,可以編譯為JavaScript。Clojure是運行在Java虛擬機上的Lisp。與Elm一樣,Clojure也是一種函數性語言,具有不可變的數據類型。與Elm不同,它是一種通用編程語言,可以在后端與JVM一起使用,也可以通過JavaScript在前端使用。

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