看看 JavaScript 的未來
已發表: 2022-03-11每個市場都被某些共同的概念所統治,JavaScript 開發也不例外。
產品生命週期是一個概念,您可以將其應用於多個不同的環境以了解和預測它們的行為。 這是一個商業概念,可以幫助我們了解產品在其生命週期中所經歷的階段,解釋這些階段對其受歡迎程度的影響——在大多數情況下,是銷售額。 如果我們觀察市場行為模式,我們可以估計產品的當前階段,從而對其受歡迎程度做出一些預測。
有四個階段:引入、成長、成熟和衰退,在上面的圖表中,您可以看到每個階段對預期產品銷售的影響。 例如,智能手機的銷量並沒有像五年前那樣增長——事實上,情況恰恰相反——所以我們可以公平地說智能手機正在進入成熟階段。
在過去的幾年裡,我們看到 JavaScript 引入了很多新技術,但我們需要時間來看看市場將如何採用它們。 沒有人願意成為另一種以零採用結束的有前途的技術的專家。 然而,現在是重新審視的時候了。 在本文中,我將看看 JavaScript 的流行程度以及可能影響這種流行的因素,並嘗試預測 JavaScript 的未來會是什麼樣子。
JavaScript 語言功能的未來
自從歐洲計算機製造商協會 (ECMA) 為標準化 JavaScript 規範 ECMAScript 建立了基於年份的發布週期以來,我們還沒有看到該語言有很多新特性——每年只有幾個。 這可能是我們看到越來越多地採用可編譯為 ES5 的語言(如 TypeScript 或 ReasonML)的原因之一,它們都為社區強烈要求的語言帶來了特性。 這並不是什麼新鮮事——JavaScript 之前經歷過這個過程(CoffeeScript),最後,這些特性最終被合併到語言標準本身中,這可能也是我們可以期待這些新類型特性的未來。
但是現在,隨著瀏覽器中 WebAssembly 的可用性越來越高,我們開始看到 compile-to-js 市場發生了改變遊戲規則的舉動。 現在,我們可以使用幾乎任何語言並將其編譯為在瀏覽器中以幾乎本機速度運行,更重要的是,我們開始看到對面向未來的功能的支持,例如對線程的支持,這將使我們能夠利用多- 代表所有設備不可避免的未來的處理器架構。
WebAssembly 的官方工具鏈將幫助您編譯 C/C++,但也有很多社區為不同語言提供的編譯器,例如 Rust、Python、Java 和 Blazor (C#)。
特別是,Rust 社區非常活躍,我們開始看到完整的前端框架,如 Yew 和 Dodrio。
這為基於瀏覽器的應用程序帶來了許多新的可能性,您只需測試一些使用 WebAssembly 構建的出色應用程序,即可看到基於瀏覽器的近原生應用程序現在已成為現實,例如 Sketchup 或 Magnum。
採用可編譯到 ES5 的類型語言已經足夠成熟,參與者已經很成熟,並且它們不會在不久的將來消失(或與 ES 合併),但我們會看到有利於類型語言的緩慢轉變WebAssembly。
網絡
前端框架
每年,我們都會在 Web 前端框架市場上看到一場大戰,而 React 在過去幾年中一直是無可爭議的贏家——自從引入他們的顛覆性技術 Virtual DOM 以來,我們幾乎看到了有義務從他們的同行那裡收養,以便在戰鬥中保持相關性。
幾年前,我們看到使用 Svelte 引入了一種全新的 Web 應用程序開發方法,“編譯器框架”在編譯時消失,只留下小而高效的 JavaScript 代碼。 然而,這個特性並不足以說服社區遷移到 Svelte,但是隨著最近 Svelte 3.0 的推出,他們將真正的反應式編程引入了框架,社區對此感到非常興奮,所以也許我們正在見證眼前的下一件大事- 結束框架。
受命運算子的啟發:
var a = 10; var b <= a + 1; a = 20; Assert.AreEqual(21, b);
Svelte 通過在編譯時通過指示代碼以拓撲順序執行來重載具有反應性的標籤語句的使用,為 JavaScript 帶來反應性:
var a = 10; $: b = a + 1; a = 20; Assert.AreEqual(21, b);
這是一個激進的新想法,可能會在不同的環境中有所幫助,因此 Svelte 的創建者也在研究 svelte-gl,這是一個編譯器框架,可以直接從 HTMLx 中聲明的 3D 場景圖生成低級 WebGL 指令。
毋庸置疑,React、Angular 和 Vue.js 不會一夜之間消失,它們的社區非常龐大,而且它們將在未來幾年保持相關性——我們甚至不確定 Svelte 是否會成為真正的繼任者,但我們可以肯定的是:我們遲早會使用不同的東西。
WebXR 和沈浸式 Web 的未來
過去 60 年來,虛擬現實一直在努力尋找主流地位,但這項技術還沒有準備好。 不到十年前,當 Jon Carmack 加入 Oculus VR(現為 Facebook Technologies, LLC 的一部分)時,新一波 VR 開始興起,從那時起,我們看到了許多支持不同類型 VR 的新設備和當然,支持 VR 的應用程序的激增。
瀏覽器供應商不想失去這個機會,因此他們加入了 WebVR 規範,允許使用 WebGL 和成熟的庫(如three.js)在 JavaScript 中創建虛擬世界。 然而,6dof 設備用戶的市場份額對於大規模 web 部署來說仍然微不足道,但移動 web 仍然能夠通過設備方向 API 提供 3D 體驗,所以我們看到了一堆實驗和大量 360 視頻一會兒。
2017 年,隨著 ARKit 和 ARCore 的推出,為移動設備和各種具有 AR 和 MR 體驗的應用程序帶來了新的能力。

但是,當您探索周圍的世界時,為一種特定的 AR 體驗下載一個特定的應用程序仍然感覺有點不自然。 如果我們只能有一個應用程序來探索不同的體驗……這聽起來很熟悉。 我們過去用瀏覽器解決了這個問題,那麼為什麼不再試一次呢?
去年,Mozilla 推出了 WebXR 設備 API 規範(在撰寫本文時,其最後一個工作草案是兩週前的),以將 AR、VR 和 MR(ergo XR)功能引入瀏覽器。
一些最重要的瀏覽器供應商緊隨其後實施,但有一個重要的例外:Safari 移動版,因此為了證明他們的觀點,Mozilla 在 iOS 平台 WebXR Viewer 下發布了支持 WebXR 的瀏覽器。
現在,這是重要的一步,因為 AR 和 VR 的結合將 6dof 帶入了移動設備和基於移動設備的耳機,如 Google Cardboard 或 Samsung Gear VR,正如您在此示例中所見,將 6dof 設備的市場份額提高了很大的利潤,並為大規模 Web 部署提供了可能性。
與此同時,Mozilla 的人一直在開發一個新的 Web 框架,以促進 3D 世界和應用程序的創建,稱為 A-Frame,這是一個基於組件的聲明性框架,具有基於 three.js 和 WebGL 的 HTML 語法,剛剛記住一件事——讓 Web 編程重新獲得樂趣和易用性。
這是他們對沉浸式網絡的努力的一部分,這是一套關於未來網絡應該是什麼樣子的新想法。 幸運的是,他們並不孤單,我們將開始在網絡上看到越來越多的身臨其境的體驗。
如果您想嘗試一下,請繼續下載 WebXR 查看器並訪問此站點以了解沉浸式網絡的可能性。
再一次,標準的基於瀏覽器的應用程序不會在一兩年內消失——我們可能會一直擁有它們。 但是 3D 應用程序和 XR 體驗正在增長,市場已經準備好並渴望擁有它們。
對 ES6 的原生支持
在過去十年中,幾乎所有 JavaScript 技術都是為了解決瀏覽器底層實現所產生的問題而創建的,但在過去幾年中,平臺本身已經成熟了很多,而且大部分問題都消失了,正如我們所見與曾經統治性能基準的 Lodash 合作。
DOM 也是如此,它的問題曾經是創建 Web 應用程序框架的實際靈感。 現在,它是一個成熟的 API,您可以在沒有框架的情況下使用它來創建應用程序——實際上,這就是 Web 組件。 它們是創建基於組件的應用程序的平台“框架”。
平台演變的另一個有趣部分是語言本身。 過去幾年我們一直在使用 Babel.js,以便能夠使用 ECMAScript 的最新功能,但由於過去幾年標準本身開始停滯不前,這足以讓瀏覽器供應商實現它們的大部分功能,包括對靜態導入語句的原生支持。 所以現在,我們可以開始考慮在沒有 Babel.js 或其他編譯器的情況下創建應用程序,因為我們(再次)在它自己的平台中支持語言功能,並且因為 Node.js 使用與 Google Chrome 相同的 V8 VM ,我們已經開始在 Node.js 中看到對 ES6 的更強支持,即使在實驗模塊標誌下使用靜態導入語句也是如此。
這並不意味著我們將不再看到以專業水平編譯的應用程序,但這意味著從基於瀏覽器的應用程序開始將像以前一樣簡單有趣。
服務器端 JavaScript
儘管 JavaScript 從 1995 年的 Netscape Enterprise Server 開始用於服務器端,但直到 2009 年 Ryan 的 Dahl 演示文稿才開始認真考慮將 JavaScript 用於服務器端應用程序。 在過去的十年裡,Node.js 發生了很多事情。 它發展並成熟了很多,再次為顛覆和新技術創造了機會。
在這種情況下,它出自它自己的創造者 Ryan Dahl 之手,他一直在使用 Deno 開發服務器端安全應用程序的新視角,Deno 是一個原生支持最新語言功能(如 async/await)的平台,以及也是最流行的 compile-to-js 語言 TypeScript,由於它們在 Rust 中的實現和 Tokio 的使用,目標是獲得最佳性能,但更重要的是,它採用了一種新的安全理念,使其與大多數服務器端平台(如 Python)區分開來, Ruby 或 Java)。 受瀏覽器安全模型的啟發,只有在用戶明確授予進程權限後,Deno 才會讓您使用主機的資源,這在開始時可能聽起來有點乏味,但通過允許可能會產生很多含義我們只需要信任平台就可以在安全的環境中運行不安全的代碼。
Node.js 將來仍然會存在,但我們可能會開始看到 AWS Lambda 和 Azure Functions 等無服務器服務來提供 Deno 功能,作為在其係統上提供不安全的服務器端代碼執行的替代方案。
結論
這是 JavaScript 世界中激動人心的時刻——許多技術已經成熟到足以為創新留出空間,活躍的社區從未停止用他們出色和令人難以置信的想法讓我們驚嘆,我們期待有很多新的替代品來替代成熟的工具因為他們的成熟階段正在迅速到來; 我們不會停止使用它們,因為它們很多都非常好,並且在戰場上有很多證據,但是新的令人興奮的市場將開始出現,您最好做好準備。
由於開發的步伐,跟上最新的 JavaScript 世界並不容易,但有一些資源可以提供真正的幫助。 首先,在我看來,最重要的新聞來源是 Echo JS,在那裡你每小時可以看到數量驚人的新內容。 但是,如果您沒有時間,JavaScript Weekly 時事通訊是 JS 一周的精彩總結。 除此之外,關注世界各地的會議也很重要,JSConf、React Conf 和 Google Chrome Developers 等 YouTube 頻道非常有幫助。
相反,如果您有興趣看到一些關於 JavaScript 發展方向的建設性批評,我建議您閱讀 JavaScript 開發人員 Justen Robertson 的《作為一名 JS 開發人員,這就是讓我徹夜難眠的原因》。
進一步閱讀 Toptal 工程博客:
- TypeScript 與 JavaScript:您的首選指南