前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript的前景与未来[每日前端夜话0x96]

JavaScript的前景与未来[每日前端夜话0x96]

作者头像
疯狂的技术宅
发布2019-07-17 15:48:28
1.2K0
发布2019-07-17 15:48:28
举报
文章被收录于专栏:京程一灯京程一灯

作者:Alejandro Hernandez

翻译:疯狂的技术宅

来源:toptal

每个市场都受到某些常见概念的制约,JavaScript 也不例外。

产品生命周期就是其中的一个概念,它可用于多个不同的环境,用以了解和预测产品的行为。这是一个商业概念,能够帮助我们了解产品在其生命中经历的阶段,并解释这些阶段对其受欢迎程度的影响 —— 在大多数情况下以销售情况来体现。可以通过观察市场行为模式评估产品当前所在的阶段,从而对其受欢迎的程度做出一些预测。

产品开发生命周期

产品生命周期有四个阶段:引入、增长、成熟和下降,在上图中,你可以看到每个阶段对预期产品销售的影响。例如智能手机的销售额并没有像五年前那样增长 ——  实际情况恰恰相反,客观地说智能手机正在进入成熟阶段。

在过去几年中,可以看到在 JavaScript 中引入了许多新技术,但我们需要时间来了解市场将如何采用它们。没有人想成为掌握无用技术的专家。在本文中,我将分析 JavaScript 的流行度,以及可能影响这种流行度的因素,并尝试预测 JavaScript 的未来趋势。

JavaScript 语言功能的未来

自欧洲计算机制造商协会(ECMA)为 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 端

前端框架

每年,我们都会在 web 前端框架市场上看到一场大战,由于 React 推出了他们的 game-changer、Virtual DOM 等技术,在过去几年里一直是无可争议的赢家,可以看到它的竞争者几乎也用了类似的技术,以便在战斗中不被淘汰。

几年前,我们看到 Svelte(一种“编译框架”)引入了一种全新的 Web 应用开发方法:在编译时消失,留下小而高效的 JavaScript 代码。然而这个功能还不足以说服社区转移到 Svelte,但随着最近推出的 Svelte 3.0 将实时响应式编程引入框架并使社区激动不已,所以也许我们正在见证前端框架中的下一个重大事件。

灵感来自 destiny operator:

代码语言:javascript
复制
1 var a = 10;
2 var b <= a + 1;
3 a = 20;
4 Assert.AreEqual(21, b);

Svelte 在编译时指示代码以拓扑顺序【https://observablehq.com/@observablehq/how-observable-runs】执行,通过重载 label 语句,为 JavaScript 带来响应性:

代码语言:javascript
复制
1 var a = 10;
2 $: b = a + 1;
3 a = 20;
4 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 在 JavaScript 中创建虚拟世界,并且出现了 three.js 之类知名的库。然而拥有 6dof 设备的用户的市场份额对于大规模 Web 部署来说仍然微不足道,但移动网络仍然能够通过设备定位 API 提供 3D 体验,所以我们能够看到一堆实验性的应用【https://experiments.withgoogle.com/collection/webvr】和很多全景视频。

2017年,随着 ARKit 和 ARCore 的推出,新功能被引入移动设备和带有 AR 与 MR 体验的各种应用程序。

但是,当你探索周围的世界时,为特定的 AR 体验下载一个特定的程序仍然感觉有点不自然。如果我们只用一个程序来探索不同的体验……这听起来很熟悉。我们过去用浏览器解决了这个问题,为什么不再来一次?【https://www.youtube.com/watch?v=yC4-WdqXcc0】

去年,Mozilla 将 WebXR 设备API规范(在撰写本文时,最后一份工作草案是在两周前将 AR,VR 和 MR (ergo XR)功能引入了浏览器。【https://www.w3.org/TR/webxr/】

一些最重要的浏览器供应商紧随其后,但有一个重要的例外:移动版 Safari,所以为了证明自己的观点,Mozilla 发布了一个支持 WebXR 的iOS平台浏览器 WebXR Viewer。

现在,这是一个重要的步骤,因为 AR 和 VR 的结合将 6dof 【https://en.wikipedia.org/wiki/Six_degrees_of_freedom】带到了移动设备和基于移动设备的耳机,如 Google Cardboard【https://vr.google.com/cardboard/】或 Samsung Gear VR等,大幅提高了 6dof 设备的市场份额,并实现大规模 Web 部署的可能性。

与此同时,Mozilla 的工作人员一直致力于开发一个新的 Web 框架,用以促进创建名为 A-Frame 的 3D 世界和应用程序,这是一个基于组件的声明框架,其 HTML 语法基于 three.js 和 WebGL,它只考虑一件事 —— 将乐趣和轻松带到 Web 编程中。

这是他们对沉浸式 Web 讨伐的一部分,这是关于未来 Web 的一系列新构想。幸运的是他们并不孤单,我们将会看到越来越多的身临其境的体验页面。

如果你想尝试一下,请下载 WebXR Viewer 并访问此站点(https://webxr-ios.webxrexperiments.com/)了解沉浸式网络的可能性。

再次强调,标准的基于浏览器的应用不会在一两年内消失 —— 我们可能会一直使用它们。但 3D 应用程序和 XR 体验正在增长,市场已经准备就绪并且渴望拥抱它们。

ES6 的原生支持

在过去十年中,几乎所有用 JavaScript 发明的技术都是为了解决浏览器底层实现所产生的问题而创建的,但是过去几年平台本身已经成熟了很多,而且大多数问题已经消失了,我们可以看到其与 Lodash 一起统治了性能基准。

DOM 也是如此,其存在的问题曾经是创建 Web 应用框架的灵感。现在它却是成熟的API【https://codeburst.io/building-efficient-components-6ee2bdaea542】,你可以不用框架【https://char.gd/blog/2019/you-dont-need-that-hipster-web-framework】创建程序 —— 实际上这就是 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 发生了很多事情【https://blog.risingstack.com/history-of-node-js/】。它不断发展和成熟,再次创造了突破新技术的机会。

Node.js 的创作者 Ryan Dahl 一直致力于用 Deno 探索服务器端安全的应用程序的新视角【https://www.youtube.com/watch?v=z6JRlx5NC9E】,这个平台本身支持最新的语言功能 async/await,以及最受欢迎的能够编译为 js 语言的 TypeScript,由于他基于Rust的实现以及 Tokio 的使用,能够达到最佳性能【https://deno.land/benchmarks.html】。但更重要的是,新的安全哲学将其与大多数服务器端平台区分开来,(如 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开发人员,这是什么使我夜不能寐 一文。

原文:https://www.toptal.com/javascript/predicting-javascript-future

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JavaScript 语言功能的未来
  • Web 端
    • 前端框架
      • WebXR 和沉浸式 Web 的未来
        • ES6 的原生支持
        • 服务器端 JavaScript
        • 结论
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档