本文概述
每个市场都由某些通用概念所统治, JavaScript开发也不例外。
产品生命周期是一个概念, 你可以将其应用于几种不同的环境, 以了解和预测其行为。它是一个业务概念, 可以帮助我们了解产品在其生命周期中所经历的各个阶段, 并解释这些阶段对其受欢迎程度(大多数情况下是销售)的影响。如果观察市场行为模式, 我们可以估计产品的当前阶段, 从而对产品的受欢迎程度做出一些预测。
分为四个阶段:引入, 增长, 成熟和下降, 在上面的图表上, 你可以看到每个阶段对预期产品销售的影响。例如, 智能手机的销售并没有像五年前那样增长(实际上, 情况恰恰相反), 因此我们可以说智能手机正在进入成熟阶段。
在过去的几年中, 我们已经看到JavaScript中引入了许多新技术, 但是我们需要时间来看看市场将如何采用它们。没有人愿意成为以零采用率结尾的另一项有前途的技术的专家。但是, 现在是时候换个角度了。在本文中, 我将研究JavaScript的流行程度以及可能影响这种流行的因素, 并且我将尝试预测JavaScript的未来。
JavaScript语言功能的未来
自欧洲计算机制造商协会(ECMA)为ECMAScript建立了基于年度的发布周期以来, ECMAScript是一种标准的JavaScript规范, 因此, 该语言没有很多新功能可用-每年只有少数。这可能是我们看到越来越多的人采用诸如TypeScript或ReasonML之类的可编译到ES5的语言的原因之一, 这两种语言都为社区带来了高度需求的功能。这并不是什么新鲜事物-JavaScript在(CoffeeScript)之前经历了此过程, 最终这些功能最终被合并到语言标准本身中, 这可能也是我们期待这些新类型功能的未来。
但是现在, 随着浏览器中WebAssembly可用性的提高, 我们开始看到一个改变游戏规则的人在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通过指示以拓扑顺序执行的代码, 通过在编译时重载带有响应性的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是否会成为真正的继任者, 但是我们可以确定:我们迟早会使用其他方法。
WebXR与沉浸式Web的未来
在过去的60年中, 虚拟现实一直在努力寻找主流地位, 但该技术尚未准备就绪。不到十年前, 当乔恩·卡马克(Jon Carmack)加入Oculus VR(现为Facebook Technologies, LLC的一部分)时, 一波新的VR浪潮开始兴起, 从那时起, 我们已经看到了许多支持不同类型VR和功能的新设备。当然, 支持VR的应用程序激增。
浏览器供应商不想失去这个机会, 因此他们加入了WebVR规范, 该规范允许使用WebGL和完善的库(如three.js)在JavaScript中创建虚拟世界。但是, 对于大规模的Web部署而言, 拥有6dof设备的用户的市场份额仍然微不足道, 但是移动网络仍可以通过设备方向API提供3D体验, 因此我们看到了许多实验和360个视频一会儿。
2017年, 随着ARKit和ARCore的推出, 具有AR和MR体验的移动设备以及各种应用程序都获得了新功能。
但是, 当你探索周围的世界时, 为一种特定的AR体验下载一个特定的应用仍然有些不自然。如果我们只有一个应用程序来探索不同的体验, 这听起来很耳熟。我们过去使用浏览器解决了该问题, 那么为什么不再尝试呢?
去年, Mozilla推出了WebXR设备API规范(在撰写本文时, 其最新工作草案是在两周前), 以将AR, VR和MR(ergo XR)功能引入浏览器。
一些最重要的浏览器供应商遵循了它们的实现方式, 但有一个重要的例外:Safari mobile, 因此为了证明自己的观点, Mozilla在iOS平台WebXR Viewer下发布了具有WebXR功能的浏览器。
现在, 这是重要的一步, 因为AR和VR的结合为移动设备和基于移动设备的耳机(如Google Cardboard或Samsung Gear VR)带来了6dof, 如你在本示例中所看到的, 通过以下方式增加了6dof设备的市场份额:很大的余量, 并有可能进行大规模的Web部署。
同时, Mozilla的开发人员一直在研究一个新的Web框架, 以促进3D世界和应用程序的创建, 称为A-Frame, 这是一个基于组件的声明性框架, 具有基于three.js和WebGL的HTML语法, 要记住的一件事-将乐趣和易用性带回到Web编程中。
这是他们对沉浸式网络进行研究的一部分, 这是有关网络未来外观的一组新思路。对我们来说幸运的是, 他们并不孤单, 我们将开始在网络上看到越来越多的身临其境的体验。
如果你想尝试一下, 请继续下载WebXR Viewer并访问此站点以了解沉浸式网络的可能性。
再次, 基于浏览器的标准应用将在一两年之内不会消失, 我们可能会一直拥有它们。但是3D应用程序和XR体验正在增长, 市场已经准备就绪并且渴望拥有它们。
对ES6的本机支持
在过去的十年中, 几乎所有用JavaScript发明的技术都是为了解决浏览器的底层实现所产生的问题而创建的, 但是在过去的几年中, 平台本身已经成熟了很多, 而且大多数问题已经消失了, 正如我们所看到的那样。与Lodash合作, 后者一度成为性能基准。
DOM也发生了同样的事情, 它的问题曾经是创建Web应用程序框架的实际灵感。现在, 它是一个成熟的API, 你无需框架即可使用它来创建应用程序-实际上, 这就是Web组件。它们是创建基于组件的应用程序的平台的”框架”。
平台发展的另一个有趣的部分是语言本身。在过去的几年中, 我们一直在使用Babel.js来使用ECMAScript的最新功能, 但是由于该标准本身在最近几年开始停滞不前, 因此有足够的时间允许浏览器供应商实现其大多数功能, 包括对静态import语句的本地支持。因此, 现在, 我们可以开始考虑在没有Babel.js或其他编译器的情况下创建应用程序, 因为我们(再次)支持其自身平台中的语言功能, 并且因为Node.js使用与Google Chrome相同的V8 VM , 即使在experimental-modules标志下使用了静态import语句, 我们也开始在Node.js中看到对ES6的更强支持。
这并不意味着我们将不再看到以专业水平进行编译的应用程序, 而是意味着从基于浏览器的应用程序开始将像过去一样轻松而有趣。
服务器端JavaScript
尽管JavaScript始于1995年的Netscape Enterprise Server的服务器端, 但直到2009年Ryan在Dahl的演讲中, JavaScript才开始被服务器端应用程序认真考虑。在过去十年中, Node.js发生了很多事情。它不断发展和成熟, 再次创造了颠覆和新技术的机会。
在这种情况下, 它来自自己的创建者Ryan Dahl, 他一直在使用Deno开发服务器端安全应用程序的新视角, 该平台本身就支持异步/等待等最新语言功能, 并且也是最流行的js编译语言TypeScript, 这要归功于它们在Rust中的实现和Tokio的使用, 从而实现了最佳性能, 但更重要的是, 它采用了一种新的安全性哲学, 将其与大多数服务器端平台(例如Python)区分开来, Ruby或Java)。受浏览器安全模型的启发, 只有在用户明确授予该进程的权限之后, Deno才允许你使用主机的资源, 这在开始时可能听起来有些乏味, 但是通过允许, 可能会带来很多影响通过信任平台, 我们可以在安全的环境中运行不安全的代码。
Node.js将来仍会存在, 但也许我们会开始看到无服务器服务, 例如AWS Lambda和Azure Functions提供Deno功能, 作为在其系统上提供不安全的服务器端代码执行的替代方法。
总结
在JavaScript世界中, 这是令人振奋的时代-许多技术已经成熟到足以为创新留出空间, 活跃的社区也从未停止过用他们的精妙和令人难以置信的想法使我们惊奇, 并且我们期望许多新的替代成熟工具的方法由于他们的成熟阶段很快到来;我们不会停止使用它们, 因为其中很多确实非常好, 并且在战场上有很多证据, 但是新的令人兴奋的市场将开始出现, 并且你最好做好准备。
由于发展的步伐, 要跟上JavaScript世界的最新发展并不容易, 但是有一些真正有用的资源。首先, 我认为最重要的新闻来源是Echo JS, 你可以在其中每小时获取大量的新内容。但是, 如果你没有时间, 则JavaScript每周时事通讯是JS一周中出色的摘要。除此之外, 密切关注世界各地的会议也很重要, 而JSConf, React Conf和Google Chrome开发者之类的YouTube频道也非常有用。
相反, 如果你有兴趣对JavaScript的发展方向提出一些建设性的批评, 我建议你与其他JavaScript开发人员Justen Robertson一起阅读《作为JS开发人员, 这就是让我彻夜难眠》。
评论前必须登录!
注册