做者:Alejandro Hernandez翻译:疯狂的技术宅javascript
原文:https://www.toptal.com/javasc...html
未经容许严禁转载前端
每一个市场都受到某些常见概念的制约,JavaScript 也不例外。vue
产品生命周期就是其中的一个概念,它可用于多个不一样的环境,用以了解和预测产品的行为。这是一个商业概念,可以帮助咱们了解产品在其生命中经历的阶段,并解释这些阶段对其受欢迎程度的影响 —— 在大多数状况下以销售状况来体现。能够经过观察市场行为模式评估产品当前所在的阶段,从而对其受欢迎的程度作出一些预测。java
产品生命周期有四个阶段:引入、增加、成熟和降低,在上图中,你能够看到每一个阶段对预期产品销售的影响。例如智能手机的销售额并无像五年前那样增加 —— 实际状况偏偏相反,客观地说智能手机正在进入成熟阶段。node
在过去几年中,能够看到在 JavaScript 中引入了许多新技术,但咱们须要时间来了解市场将如何采用它们。没有人想成为掌握无用技术的专家。在本文中,我将分析 JavaScript 的流行度,以及可能影响这种流行度的因素,并尝试预测 JavaScript 的将来趋势。python
自欧洲计算机制造商协会(ECMA)为 ECMAScript 创建年度发布周期的机制以来,咱们尚未看到太多的新功能出如今语言中 —— 每一年只有几个。这多是被编译为 ES5 的语言增长的缘由之一,如 TypeScript 或 ReasonML 都为社区高度要求的语言带来了新功能。但这并不新鲜 —— JavaScript 以前曾经历过这个过程(CoffeeScript),这些功能最终会被合并到语言标准自己,这多是咱们将来能够期待的新类型的功能。react
可是咱们开始看到随着浏览器中 WebAssembly 的可用性的增长,compile-to-js 的游戏规则发生了变化。如今咱们几乎能够用任何一种语言,并将其编译为在浏览器中以几乎本机的速度运行,更重要的是,咱们已经开始看到将来功能的支持,如线程支持,这将使咱们可以利用表明将来的的多处理器架构设备。ios
WebAssembly 的官方工具链可以帮助你编译 C/C++ 代码,可是许多社区也提供了不一样语言的编译器,如 Rust,Python,Java 和 Blazor(C#)。git
特别是 Rust 社区很是活跃,咱们开始看到完整的前端框架,如Yew 和 Dodrio。
这为基于浏览器的应用带来了更多新的可能性,你只须要测试一些使用 WebAssembly 构建的优秀应用,就能够知道基于浏览器的近乎原生的应用如今已经成为现实,例如 Sketchup 或 Magnum。
编译为 ES5 的类型语言已经足够成熟,玩家也已经很成熟,而且在不久的未来这些语言并不会消失(或与ES合并),但咱们会看到类型语言会缓慢的改变 WebAssembly。
每一年,咱们都会在 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 指令。
不能说 React,Angular 和 Vue.js 将会在一晚上之间消失,他们的社区很是庞大,而且将在将来几年保持这种态势 —— 咱们甚至不肯定 Svelte 是否会成为真正的继任者,但咱们能够肯定的是:咱们早晚会使用不一样的东西。
虚拟现实在过去 60 年里一直在努力寻求成为主流,但这项技术尚未准备好。不到十年前,当 Jon Carmack 加入 Oculus VR(如今是 Facebook Technologies 的一部分, LLC)时,新的 VR 浪潮开始兴起,从那时起,咱们已经看到不少新设备支持不一样类型的 VR,固然还有支持 VR 的应用程序的激增。
浏览器供应商不想失去这个机会,所以他们加入了 WebVR 规范,容许使用 WebGL 在 JavaScript 中建立虚拟世界,而且出现了 three.js 之类知名的库。然而拥有 6dof 设备的用户的市场份额对于大规模 Web 部署来讲仍然微不足道,但移动网络仍然可以经过设备定位 API 提供 3D 体验,因此咱们可以看到一堆实验性的应用和不少全景视频。
2017年,随着 ARKit 和 ARCore 的推出,新功能被引入移动设备和带有 AR 与 MR 体验的各类应用程序。
可是,当你探索周围的世界时,为特定的 AR 体验下载一个特定的程序仍然感受有点不天然。若是咱们只用一个程序来探索不一样的体验……这听起来很熟悉。咱们过去用浏览器解决了这个问题,为何不再来一次?
去年,Mozilla 将WebXR设备API规范(在撰写本文时,最后一份工做草案是在两周前将 AR,VR 和 MR (ergo XR)功能引入了浏览器。
一些最重要的浏览器供应商紧随其后,但有一个重要的例外:移动版 Safari,因此为了证实本身的观点,Mozilla 发布了一个支持 WebXR 的iOS平台浏览器 WebXR Viewer。
如今,这是一个重要的步骤,由于 AR 和 VR 的结合将 6dof 带到了移动设备和基于移动设备的耳机,如 Google Cardboard 或 Samsung Gear VR等,大幅提升了 6dof 设备的市场份额,并实现大规模 Web 部署的可能性。
与此同时,Mozilla 的工做人员一直致力于开发一个新的 Web 框架,用以促进建立名为 A-Frame 的 3D 世界和应用程序,这是一个基于组件的声明框架,其 HTML 语法基于 three.js 和 WebGL,它只考虑一件事 —— 将乐趣和轻松带到 Web 编程中。
这是他们对沉浸式 Web 讨伐的一部分,这是关于将来 Web 的一系列新构想。幸运的是他们并不孤单,咱们将会看到愈来愈多的身临其境的体验页面。
若是你想尝试一下,请下载 WebXR Viewer 并访问此站点了解沉浸式网络的可能性。
再次强调,标准的基于浏览器的应用不会在一两年内消失 —— 咱们可能会一直使用它们。但 3D 应用程序和 XR 体验正在增加,市场已经准备就绪而且渴望拥抱它们。
在过去十年中,几乎全部用 JavaScript 发明的技术都是为了解决浏览器底层实现所产生的问题而建立的,可是过去几年平台自己已经成熟了不少,并且大多数问题已经消失了,咱们能够看到其与 Lodash 一块儿统治了性能基准。
DOM 也是如此,其存在的问题曾经是建立 Web 应用框架的灵感。如今它倒是成熟的API,你能够不用框架建立程序 —— 实际上这就是 web components。它们是建立基于组件的应用程序平台的“框架”。
关于平台演变的另外一个有趣的部分是语言自己。过去几年咱们一直经过 Babel.js 来使用 ECMAScript 的最新功能,但因为标准自己在最后一点开始停滞不前几年,这足以让浏览器厂商实现他们的大部分功能,包括静态导入声明的原生支持。因此如今咱们能够开始考虑在没有 Babel.js 或其余编译器的状况下建立应用程序,由于咱们(再次)支持本身的平台中的语言功能,以及因为 Node.js 使用了与 Google Chrome 相同的 V8 VM ,咱们已经看到 Node.js 对 ES6 更强的支持。
并非说咱们不会再看到专业级的应用程序编译,可是这意味着从基于浏览器的应用开始将像之前同样简单而有趣。
尽管 JavaScript 在 1995 年就能够基于 Netscape Enterprise Server 开发服务器端,但直到 Ryan Dahl 在 2009 年的演示以后,JavaScript 才开始被认真的考虑用于服务器端应用。在过去十年中,Node.js 发生了不少事情。它不断发展和成熟,再次创造了突破新技术的机会。
Node.js 的创做者 Ryan Dahl 一直致力于用 Deno 探索服务器端安全的应用程序的新视角,这个平台自己支持最新的语言功能 async/await,以及最受欢迎的可以编译为 js 语言的 TypeScript,因为他基于Rust的实现以及 Tokio 的使用,可以达到最佳性能 。但更重要的是,新的安全哲学将其与大多数服务器端平台区分开来,(如Python,Ruby 或 Java)。受浏览器安全模型的启发,Deno 只有在用户明确授予进程权限后才能使用主机的资源,这在开始时可能有点乏味。可是仅仅经过信任平台,容许咱们在安全的环境中运行不安全的代码,可能会产生不少重要的影响。
Node.js 的将来仍在那里,但咱们可能会开始看到像 AWS Lambda 这样的 serverless 服务和 Azure Functions 提供 Deno 功能的替代方案,在其系统上提供不安全的服务器端代码执行。
这些都是 JavaScript 世界激动人心的地方 —— 许多技术已经成熟到足觉得创新留出大量空间的地步,活跃的社区一只都在用使人惊叹和难以置信的想法让咱们惊讶,并且咱们指望有不少新的替代方法来创建成熟的工具,由于他们的成熟阶段很快就要到了;咱们不会中止使用它们,由于它们中的大部分都很是好,而且在实际项目中有充足的证据,可是使人兴奋的新的市场将开始出现,你最好作好准备。
随着开发速度的提升,掌握最新的 JavaScript 动态并不容易,但有一些资源能够提供帮助。首先在我看来,最重要的新闻来源是 Echo JS,每小时你都会得到大量的新内容。可是若是你没有时间,那么 JavaScript Weekly 时事通信为你提供一周的 JavaScript 精彩摘要。除此以外,关注世界各地的会议以及 JSConf,React Conf 等 YouTube 频道也很重要,Google Chrome Developers 也很是有帮助。
相反,若是你有兴趣看到一些建设性的批评 JavaScript 的方向,我建议阅读由 Justen Robertson 撰写的做为一个JS开发人员,这是什么使我夜不能寐 一文。