JavaScript的發展前景與將來預測

做者:Alejandro Hernandez

翻譯:瘋狂的技術宅javascript

原文:https://www.toptal.com/javasc...html

未經容許嚴禁轉載前端

每一個市場都受到某些常見概念的制約,JavaScript 也不例外。vue

產品生命週期就是其中的一個概念,它可用於多個不一樣的環境,用以瞭解和預測產品的行爲。這是一個商業概念,可以幫助咱們瞭解產品在其生命中經歷的階段,並解釋這些階段對其受歡迎程度的影響 —— 在大多數狀況下以銷售狀況來體現。能夠經過觀察市場行爲模式評估產品當前所在的階段,從而對其受歡迎的程度作出一些預測。java

clipboard.png

產品生命週期有四個階段:引入、增加、成熟和降低,在上圖中,你能夠看到每一個階段對預期產品銷售的影響。例如智能手機的銷售額並無像五年前那樣增加 —— 實際狀況偏偏相反,客觀地說智能手機正在進入成熟階段。node

在過去幾年中,能夠看到在 JavaScript 中引入了許多新技術,但咱們須要時間來了解市場將如何採用它們。沒有人想成爲掌握無用技術的專家。在本文中,我將分析 JavaScript 的流行度,以及可能影響這種流行度的因素,並嘗試預測 JavaScript 的將來趨勢。python

JavaScript 語言功能的將來

自歐洲計算機制造商協會(ECMA)爲 ECMAScript 創建年度發佈週期的機制以來,咱們尚未看到太多的新功能出如今語言中 —— 每一年只有幾個。這多是被編譯爲 ES5 的語言增長的緣由之一,如 TypeScript 或 ReasonML 都爲社區高度要求的語言帶來了新功能。但這並不新鮮 —— JavaScript 以前曾經歷過這個過程(CoffeeScript),這些功能最終會被合併到語言標準自己,這多是咱們將來能夠期待的新類型的功能。react

可是咱們開始看到隨着瀏覽器中 WebAssembly 的可用性的增長,compile-to-js 的遊戲規則發生了變化。如今咱們幾乎能夠用任何一種語言,並將其編譯爲在瀏覽器中以幾乎本機的速度運行,更重要的是,咱們已經開始看到將來功能的支持,如線程支持,這將使咱們可以利用表明將來的的多處理器架構設備。ios

WebAssembly官方工具鏈可以幫助你編譯 C/C++ 代碼,可是許多社區也提供了不一樣語言的編譯器,如 RustPythonJavaBlazor(C#)git

特別是 Rust 社區很是活躍,咱們開始看到完整的前端框架,如YewDodrio

這爲基於瀏覽器的應用帶來了更多新的可能性,你只須要測試一些使用 WebAssembly 構建的優秀應用,就能夠知道基於瀏覽器的近乎原生的應用如今已經成爲現實,例如 SketchupMagnum

編譯爲 ES5 的類型語言已經足夠成熟,玩家也已經很成熟,而且在不久的未來這些語言並不會消失(或與ES合併),但咱們會看到類型語言會緩慢的改變 WebAssembly。

Web 端

前端框架

每一年,咱們都會在 web 前端框架市場上看到一場大戰,因爲 React 推出了他們的 game-changer、Virtual DOM 等技術,在過去幾年裏一直是無可爭議的贏家,能夠看到它的競爭者幾乎也用了相似的技術,以便在戰鬥中不被淘汰。

幾年前,咱們看到 Svelte(一種「編譯框架」)引入了一種全新的 Web 應用開發方法: 依賴在編譯後消失,只留下小而高效的 JavaScript 代碼。然而這個功能還不足以說服社區轉移到 Svelte,但隨着最近推出的 Svelte 3.0實時響應式編程引入框架並使社區激動不已,因此也許咱們正在見證前端框架中的下一個重大事件。

靈感來自 destiny operator

var a = 10;
var b <= a + 1;
a = 20;
Assert.AreEqual(21, b);

Svelte 在編譯時指示代碼以拓撲順序執行,經過重載 label 語句,爲 JavaScript 帶來響應性:

var a = 10;
$: b = a + 1;
a = 20;
Assert.AreEqual(21, b);

這是一個激進的新想法,可能會在不一樣的狀況下有所幫助,所以 Svelte 的建立者也在 svelte-gl(一個編譯器框架)上工做,它將直接從 HTMLx 中聲明的 3D 場景圖生成低級 WebGL 指令。

不能說 ReactAngularVue.js 將會在一晚上之間消失,他們的社區很是龐大,而且將在將來幾年保持這種態勢 —— 咱們甚至不肯定 Svelte 是否會成爲真正的繼任者,但咱們能夠肯定的是:咱們早晚會使用不一樣的東西。

WebXR 和沉浸式 Web 的將來

虛擬現實在過去 60 年裏一直在努力尋求成爲主流,但這項技術尚未準備好。不到十年前,當 Jon Carmack 加入 Oculus VR(如今是 Facebook Technologies 的一部分, LLC)時,新的 VR 浪潮開始興起,從那時起,咱們已經看到不少新設備支持不一樣類型的 VR,固然還有支持 VR 的應用程序的激增。

瀏覽器供應商不想失去這個機會,所以他們加入了 WebVR 規範,容許使用 WebGL 在 JavaScript 中建立虛擬世界,而且出現了 three.js 之類知名的庫。然而擁有 6dof 設備的用戶的市場份額對於大規模 Web 部署來講仍然微不足道,但移動網絡仍然可以經過設備定位 API 提供 3D 體驗,因此咱們可以看到一堆實驗性的應用和不少全景視頻

2017年,隨着 ARKitARCore 的推出,新功能被引入移動設備和帶有 ARMR 體驗的各類應用程序。

可是,當你探索周圍的世界時,爲特定的 AR 體驗下載一個特定的程序仍然感受有點不天然。若是咱們只用一個程序來探索不一樣的體驗……這聽起來很熟悉。咱們過去用瀏覽器解決了這個問題,爲何不再來一次

去年,Mozilla WebXR設備API規範(在撰寫本文時,最後一份工做草案是在兩週前將 AR,VR 和 MR (ergo XR)功能引入了瀏覽器。

一些最重要的瀏覽器供應商緊隨其後,但有一個重要的例外:移動版 Safari,因此爲了證實本身的觀點,Mozilla 發佈了一個支持 WebXR 的iOS平臺瀏覽器 WebXR Viewer

如今,這是一個重要的步驟,由於 AR 和 VR 的結合將 6dof 帶到了移動設備和基於移動設備的耳機,如 Google CardboardSamsung Gear VR等,大幅提升了 6dof 設備的市場份額,並實現大規模 Web 部署的可能性。

與此同時,Mozilla 的工做人員一直致力於開發一個新的 Web 框架,用以促進建立名爲 A-Frame 的 3D 世界和應用程序,這是一個基於組件的聲明框架,其 HTML 語法基於 three.jsWebGL,它只考慮一件事 —— 將樂趣和輕鬆帶到 Web 編程中。

這是他們對沉浸式 Web 討伐的一部分,這是關於將來 Web 的一系列新構想。幸運的是他們並不孤單,咱們將會看到愈來愈多的身臨其境的體驗頁面。

若是你想嘗試一下,請下載 WebXR Viewer 並訪問此站點瞭解沉浸式網絡的可能性。

再次強調,標準的基於瀏覽器的應用不會在一兩年內消失 —— 咱們可能會一直使用它們。但 3D 應用程序和 XR 體驗正在增加,市場已經準備就緒而且渴望擁抱它們。

ES6 的原生支持

在過去十年中,幾乎全部用 JavaScript 發明的技術都是爲了解決瀏覽器底層實現所產生的問題而建立的,可是過去幾年平臺自己已經成熟了不少,並且大多數問題已經消失了,咱們能夠看到其與 Lodash 一塊兒統治了性能基準。

DOM 也是如此,其存在的問題曾經是建立 Web 應用框架的靈感。如今它倒是成熟的API,你能夠不用框架建立程序 —— 實際上這就是 web components。它們是建立基於組件的應用程序平臺的「框架」。

關於平臺演變的另外一個有趣的部分是語言自己。過去幾年咱們一直經過 Babel.js 來使用 ECMAScript 的最新功能,但因爲標準自己在最後一點開始停滯不前幾年,這足以讓瀏覽器廠商實現他們的大部分功能,包括靜態導入聲明的原生支持。因此如今咱們能夠開始考慮在沒有 Babel.js 或其餘編譯器的狀況下建立應用程序,由於咱們(再次)支持本身的平臺中的語言功能,以及因爲 Node.js 使用了與 Google Chrome 相同的 V8 VM ,咱們已經看到 Node.js 對 ES6 更強的支持。

並非說咱們不會再看到專業級的應用程序編譯,可是這意味着從基於瀏覽器的應用開始將像之前同樣簡單而有趣。

服務器端 JavaScript

儘管 JavaScript 在 1995 年就能夠基於 Netscape Enterprise Server 開發服務器端,但直到 Ryan Dahl 在 2009 年的演示以後,JavaScript 纔開始被認真的考慮用於服務器端應用。在過去十年中,Node.js 發生了不少事情。它不斷髮展和成熟,再次創造了突破新技術的機會。

Node.js 的創做者 Ryan Dahl 一直致力於用 Deno 探索服務器端安全的應用程序的新視角,這個平臺自己支持最新的語言功能 async/await,以及最受歡迎的可以編譯爲 js 語言的 TypeScript,因爲他基於Rust的實現以及 Tokio 的使用,可以達到最佳性能 。但更重要的是,新的安全哲學將其與大多數服務器端平臺區分開來,(如PythonRubyJava)。受瀏覽器安全模型的啓發,Deno 只有在用戶明確授予進程權限後才能使用主機的資源,這在開始時可能有點乏味。可是僅僅經過信任平臺,容許咱們在安全的環境中運行不安全的代碼,可能會產生不少重要的影響。

Node.js 的將來仍在那裏,但咱們可能會開始看到像 AWS Lambda 這樣的 serverless 服務和 Azure Functions 提供 Deno 功能的替代方案,在其系統上提供不安全的服務器端代碼執行。

結論

這些都是 JavaScript 世界激動人心的地方 —— 許多技術已經成熟到足覺得創新留出大量空間的地步,活躍的社區一隻都在用使人驚歎和難以置信的想法讓咱們驚訝,並且咱們指望有不少新的替代方法來創建成熟的工具,由於他們的成熟階段很快就要到了;咱們不會中止使用它們,由於它們中的大部分都很是好,而且在實際項目中有充足的證據,可是使人興奮的新的市場將開始出現,你最好作好準備。

隨着開發速度的提升,掌握最新的 JavaScript 動態並不容易,但有一些資源能夠提供幫助。首先在我看來,最重要的新聞來源是 Echo JS,每小時你都會得到大量的新內容。可是若是你沒有時間,那麼 JavaScript Weekly 時事通信爲你提供一週的 JavaScript 精彩摘要。除此以外,關注世界各地的會議以及 JSConfReact Conf 等 YouTube 頻道也很重要,Google Chrome Developers 也很是有幫助。

相反,若是你有興趣看到一些建設性的批評 JavaScript 的方向,我建議閱讀由 Justen Robertson 撰寫的做爲一個JS開發人員,這是什麼使我夜不能寐 一文。


本文首發微信公衆號:前端先鋒

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章

歡迎繼續閱讀本專欄其它高贊文章:


相關文章
相關標籤/搜索