看看 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:您的首选指南