發(fā)布于:2021-01-08 17:38:25
0
1669
0
JavaScript并不適合所有人,但是有哪些替代方案?在本文中,F(xiàn)uture Hosting的馬修·戴維斯(Matthew Davis)研究了其中的5種,權(quán)衡了利弊。
1995年,Netscape Communications聘請(qǐng)了Brendan Eich為當(dāng)今最流行的Web瀏覽器Netscape Navigator添加新語言。Netscape希望增強(qiáng)Web的可編程性。
結(jié)果是:LiveScript于1995年末發(fā)布,帶有瀏覽器的beta版本,并在最終發(fā)行之前重命名為JavaScript,以利用Netscape與流行的Java語言背后的公司Sun Microsystems的合作關(guān)系(盡管JavaScript與Java無關(guān)。 )。
后來與他人共同創(chuàng)立Mozilla的Eich在10天內(nèi)開發(fā)了JavaScript的原始版本。在接下來的25個(gè)世紀(jì)中,JavaScript從一種廣為人知且受到嚴(yán)重限制的語言演變?yōu)闃?gòu)建現(xiàn)代Web應(yīng)用程序的強(qiáng)大基礎(chǔ)。如今,JavaScript主導(dǎo)了瀏覽器,并通過Node.js占領(lǐng)了許多服務(wù)器空間。
但是,JavaScript并不是每個(gè)開發(fā)人員都喜歡的語言。早期,Eich做出了一些古怪的決定,這些決定直到2019年仍然存在,包括原型繼承,“ this”和JavaScript激進(jìn)且不一致的類型強(qiáng)制。
近年來,開發(fā)人員創(chuàng)建了JavaScript的替代方案。JavaScript仍然是在瀏覽器中運(yùn)行的唯一語言,因此這些新語言可以編譯(或轉(zhuǎn)換為JavaScript)。CoffeeScript是第一個(gè)獲得廣泛普及的應(yīng)用程序,但是很快被眾多競(jìng)爭(zhēng)者所取代,每個(gè)競(jìng)爭(zhēng)者都對(duì)JavaScript進(jìn)行了獨(dú)特的改進(jìn)。
Dart
Dart是Google創(chuàng)建的一種面向?qū)ο蟮念愃朴贑的語言,可以代替JavaScript。它取消了JavaScript的原型繼承系統(tǒng),轉(zhuǎn)而采用了一種更為傳統(tǒng)的面向?qū)ο蠓椒?,該方法?duì)于使用Java或C ++的任何人都是熟悉的。與JavaScript不同,Dart是一種靜態(tài)類型的語言,消除了JavaScript代碼中常見的錯(cuò)誤源。Dart支持類型推斷,因此不必在每次聲明變量或函數(shù)時(shí)都包含類型樣板。
Dart最令人興奮的功能可能是它在網(wǎng)絡(luò)之外的可用性。Dart代碼可以轉(zhuǎn)換為JavaScript以在瀏覽器中運(yùn)行,但是也可以用于獨(dú)立應(yīng)用程序和服務(wù)器端開發(fā)。Google的Flutter UI工具包是一個(gè)可移植的前端框架,可用于在臺(tái)式機(jī),移動(dòng)設(shè)備和Web上構(gòu)建本機(jī)應(yīng)用程序。
TypeScript
TypeScript是Microsoft爭(zhēng)奪更好JavaScript的切入點(diǎn)。與Dart不同,TypeScript不是一種全新的語言,而是JavaScript的超集。有效的JavaScript可以由TypeScript編譯器進(jìn)行編譯,但是TypeScript添加了一些新功能,這些功能可以改善JavaScript的局限性并使之現(xiàn)代化,其中最重要的是可選的類型系統(tǒng)。
許多JavaScript的失敗是由于缺少靜態(tài)類型而引起的,從而限制了編譯器在運(yùn)行時(shí)可以執(zhí)行的檢查。顧名思義,TypeScript實(shí)現(xiàn)了一種類型表示法,開發(fā)人員可以使用它來為Web應(yīng)用程序編程帶來類型安全性。與Dart一樣,TypeScript也支持類型推斷。
值得一提的是,TypeScript比其Google競(jìng)爭(zhēng)對(duì)手更受歡迎。該角框架與開發(fā)TypeScript,即使它是谷歌的項(xiàng)目。TypeScript也可以與React和Vue一起使用。
Elm
Dart和TypeScript具有可識(shí)別的親屬到JavaScript和C.Elm是不同的。它是一種靜態(tài)類型的函數(shù)式語言,比C語言更類似于Haskell,但沒有Haskell的頭復(fù)雜性。
本質(zhì)上,Elm是用于構(gòu)建Web前端的特定于域的語言。
Elm不是像JavaScript這樣的通用語言,并且不會(huì)嘗試成為語言。相反,創(chuàng)建者Evan Czaplicki專注于構(gòu)建最佳的前端Web應(yīng)用程序開發(fā)體驗(yàn)。Elm的主要優(yōu)點(diǎn)是,通過靜態(tài)類型和不可變值,它消除了前端代碼中的許多潛在錯(cuò)誤。Elm宣傳自己為一種“在實(shí)踐中沒有運(yùn)行時(shí)例外”的語言,這意味著,如果Elm程序完全運(yùn)行,那么在生產(chǎn)中就不會(huì)遇到令人震驚的錯(cuò)誤。
以下Elm代碼示例來自該語言的簡(jiǎn)介,這是Elm優(yōu)秀文檔的一部分。
update msg model = case msg of Increment -> model + 1 Decrement -> model - 1 view model = div [] [ button [ onClick Decrement ] [ text "-" ] , div [] [ text (String.fromInt model) ] , button [ onClick Increment ] [ text "+" ] ]
Elm代碼看起來不像JavaScript,但是它具有簡(jiǎn)單直觀的語法。任何學(xué)習(xí)過JavaScript的人都應(yīng)該對(duì)Elm沒什么麻煩。
ClojureScript
繼續(xù)遠(yuǎn)離類似JavaScript的語言,我們來到ClojureScript,它是Clojure編程語言的一種版本,可以編譯為JavaScript。Clojure是在Java虛擬機(jī)上運(yùn)行的Lisp。與Elm一樣,Clojure是一種具有不變數(shù)據(jù)類型的功能語言。與Elm不同,它是一種通用編程語言,可以在JVM的后端和通過JavaScript的前端使用。
(ns hello-world.core)
(println "Hello world!")
像所有Lisps一樣,Clojure用S表達(dá)式編寫,并用括號(hào)分隔。在話Clojure的創(chuàng)造者,豐富希基的,ClojureScript“旨在通過使用Clojure,一個(gè)強(qiáng)大,簡(jiǎn)潔和強(qiáng)大的編程語言JavaScript的更換,以解決在客戶端/嵌入式應(yīng)用開發(fā)故事中的薄弱環(huán)節(jié)?!?Clojure可以與React和其他流行的JavaScript框架一起使用。
作為歷史記錄,Netscape雇用Brendan Eich時(shí),他們計(jì)劃將Scheme集成到Navigator中,而不是創(chuàng)建一種新語言。Scheme是Lisp,因此,如果歷史有所不同,Lisp可能會(huì)成為世界上最受歡迎的編程語言家族。JavaScript通過一流的函數(shù),閉包和lambda保留了部分“ Lispiness”。道格拉斯·克羅克福德(Douglas Crockford)在JavaScript的開發(fā)中發(fā)揮了關(guān)鍵作用,并發(fā)明了JSON,他將JavaScript稱為“衣冠楚楚的Lisp”。
Phoenix LiveView
我們研究過的語言可以編譯為JavaScript。他們使開發(fā)人員無需編寫JavaScript即可構(gòu)建客戶端應(yīng)用程序。
Phoenix LiveView是不同的。Phoenix是使用相對(duì)較新的Elixir編程語言編寫的Web框架。Phoenix是一個(gè)服務(wù)器端框架,為什么我們要在一篇專門針對(duì)瀏覽器JavaScript替代品的文章中討論它呢?因?yàn)長iveView可以在許多Web開發(fā)方案中替代JavaScript。
Phoenix的創(chuàng)建者Chris McCord稱LiveView為“一個(gè)令人興奮的新庫,它通過服務(wù)器渲染的HTML來實(shí)現(xiàn)豐富的實(shí)時(shí)用戶體驗(yàn)。” LiveView使用Phoenix頻道在瀏覽器和服務(wù)器之間創(chuàng)建雙向連接。LiveView基于Websockets,可用于創(chuàng)建交互式體驗(yàn),而無需編寫JavaScript。很自然地?fù)?dān)心這種方法太慢而無法使用,但是LiveView旨在最大程度地減少數(shù)據(jù)傳輸,并且在實(shí)踐中可用于構(gòu)建低延遲接口。
LiveView有局限性。不建議在LiveView中構(gòu)建復(fù)雜的應(yīng)用程序,例如Google Docs。如果離線功能對(duì)應(yīng)用程序很重要,則LiveView不是正確的解決方案。但是,對(duì)于表單,實(shí)時(shí)界面更新和數(shù)據(jù)驗(yàn)證等功能,Phoenix LiveView是JavaScript的可行替代方案。它也比大多數(shù)JavaScript應(yīng)用程序小得多。LiveView的瀏覽器代碼約為React大小的四分之一。
總結(jié)思想
我們研究了編寫JavaScript的五種方法,每種方法都提供了不同的方法來創(chuàng)建Web應(yīng)用程序和交互式界面。目前,無法避免使用JavaScript,因?yàn)樗荳eb瀏覽器唯一支持的語言。
但是隨著WebAssembly被更廣泛地采用,這種情況可能會(huì)改變。所有主要的瀏覽器都支持WebAssembly,并且將來,它有可能成為針對(duì)Web的語言的默認(rèn)編譯目標(biāo)。那是另一篇文章的主題,但是對(duì)于Web開發(fā)人員來說,開始探索WebAssembly的可能性將是一個(gè)好主意。
作者介紹
熱門博客推薦