avaScript框架之间的终极性能之战
我在网上浏览时发现,两年多来我们没有一个不错的JavaScript框架性能大赛。因此,在2020年总结之前,让我们在将这些库相互抗衡中获得一些乐趣。
如何采用20个最受欢迎的JavaScript框架,并使用JS Framework Benchmark使其并驾齐驱?
免责声明:此比较在整个过程中很有趣,也可能具有教育意义。和往常一样,这里的每个库对于大多数事情来说都足够高效。如果有什么要强调的是,性能可以来自多种不同的技术。虽然您可以将其用作参考,但您应该独立验证各个用例的性能。您可以在这里找到最新的官方结果。如果您想进一步了解此基准测试的内容,请在此处发布指南。
还值得一提的是,我是Solid Framework的作者。因此,我不能在这里表现出任何偏见。但是我打算让这些数字在很大程度上说明自己。撇开所有这些,享受比较。
我已经采用了JS框架基准测试的最新Chrome 87 监控结果。它们在Fedora 33下的Core i7 Razor Blade 15上运行,且缓解措施已关闭。
我过滤掉了所有有问题的实现,然后获得了Github星级的前20个库。对于具有多个版本的库,我没有使用第三方库就获取了它们的最新版本和性能最高的变体。
1. Vue (177k)
2. React (161k)
3. Angular (68.9k)
4. Svelte (40.5k)
5. Preact (27.9k)
6. Ember (21.7k)
7. HyperApp(18.2k)
8. Inferno (14.6k)
9. Riot (14.4k)
10. Yew (14.2k)
11. Mithril (12.5k)
12. Alpine (12.4k)
13. Knockout (9.9k)
14. Marko (9.9k)
15. lit-html (6.9k)
16. Rax (7k)
17. Elm (6.2k)
18. Ractive (5.8k)
19. Solid (4.7k)
20. Imba (4.1k)
注意:我将把LitElement实现用作lit-html示例,因为标准示例已被标记为问题。开销应该最小,因为它是包装在单个Web组件中的原始lit-html。
这是当前Web开发生态系统中相当不错的一部分。尽管Github Stars并不是全部,但在比较中有100多个库,因此我需要标准来选择竞争者。
每个库将在3个类别中进行比较:DOM性能,启动指标和内存使用情况。此外,我将框架分为4组,以将它们与原始性能同级进行最佳比较。但是,我将在所有三个方面对库进行排名。
在每个组中,将存在参考Vanilla JavaScript条目。使用所有最佳技术,此实现都经过了最佳化以达到最佳性能。它将作为所有比较的基准。
因此,让我们开始吧。
这是最大的组,由一些最受欢迎的库组成。还有许多来自Facebook,Google,eBay和Alibaba等公司支持的公司。这些库要么在性能上较少关注某个方面,要么在某一方面强调性能,而在其他方面则受苦。
> Group 4 Performance
这里有很多红色和橙色,但请记住,这些库平均仅比我们在此处使用的痛苦手工制作的命令式Vanilla JavaScript示例慢大约2倍。400ms与200ms有何不同?
在原始性能方面,React是该包的领导者。考虑到架构的差异性,尽管它从未间断令人惊奇,但React,Marko,Angular和Ember的整体距离有多近。仍然是React,这是React Hooks的实现,在这里是领导者。对于所有指向额外的函数创建并坚持使用类的人来说,性能参数不在您身边。React Hooks是使用React的最高效的方法。
这里的大多数库要么简单的列表排序导致交换行性能确实很差,要么创建成本很高。Ember是这种情况的极端案例,因为它的更新性能比该组中的其他成员要好得多,但在某些最坏的情况下却是创建过程。
最慢的库(Knockout,Ractive和Alpine)都是具有类似架构的细粒度反应库。Knockout和Ractive(也由Svelte的作者Rich Harris撰写)来自2010年初VDOM库主导之前。我还怀疑Alpine是否期望使用其JavaScript方法来渲染1万行。在比较之后,我们将看不到另一个纯粹的细粒度反应库。
接下来,我们将主要根据库捆绑软件的大小来比较类别的启动指标。
> Group 4 Startup
此处订单变化很大。在Alpine性能最差的地方,我们可以看到它具有最小的捆绑包大小和最快的启动时间。Marko(来自eBay)紧随其后,其次是Rax(来自阿里巴巴)。所有这三个库都是为服务器端渲染而构建的,主要是通过更轻松的客户端交互来实现的。这就是为什么他们要进入第4组才能获得出色的表现,但却领先于这里的原因。
表格的后半部分是我们在基准测试中拥有的最大的捆绑软件,以Ember结尾,是任何其他实现的两倍以上。我不知道为什么要花费超过半兆字节才能呈现此表。但这确实会损害启动性能。
我们要看的最后一类是内存消耗。
> Group 4 Memory
内存往往会反映出我们已经看到的模式,因为它会对性能产生重大影响,而大型库往往会使用更多模式。Alpine,Marko和React引领潮流。老化的细粒度反应库使用最多的Ember。Ember是巨大的。仅在页面上渲染6个按钮之后,它已经使用了比Vanilla在整个套件中要使用的更多的内存。
通常,该组在GitHub上代表30万颗星,可能是NPM下载量的最大部分,但Marko和Alpine在此人群中的平均排名最高。在性能方面,React排名第三,仅次于他们。
这是我们拥有钛白粉比例框架的组,而我们的旧React库也已经消失了。让我们继续乐观一些。
在这些框架中,您可以知道已经考虑了性能。他们意识到规模,并且在创建和更新成本之间找到了平衡。我们看到了各种各样的方法。Yew中的一个Web Assembly框架(用Rust编写),LitElement中的一个Web组件。
事不宜迟,让我们看看他们的做法。
> Group 3 Performance
分数已经提高了一点,我们看到的差距甚至更大。Preact是该组中性能最高的,仅增加了LitElement。Vue 3和Riot捆绑在一起,这两个库都位于中间,它们的历史都包括反应性和VDOM。Mithril是最早将性能放在首位的VDOM库之一,Yew是唯一的WASM库尾部。
在性能方面,所有这些库都是相似的。在这堆中没有纯的反应库。它们都使用自顶向下的呈现方式,无论是VDOM还是简单的Tag Template Literal diff。与上一组相比,它们的对帐清单更智能(请参阅交换行性能)。但是,大多数仍然具有某些最慢的选择行性能。
Yew是例外,但在其他方面则较慢。让我们看看其余的测试是否有帮助。
> Group 3 Startup
情况有所改观,但在启动指标方面,Preact仍然处于领先地位。Yew是这一堆中唯一真正的大型库。WASM库的确偏大。
再次,我们看到一种结果配对。Vue是Yew最大的第二名。Preact和Riot非常紧凑。Mithril和LitElement在中间
Preact是React的4kb替代品,绝对是我们迄今为止所看到的最小的库。但是最小的库仍在继续。尽管如此,这个范围内的任何库都不应该太关注它们的包大小。
> Group 3 Memory
Yew这次赢了。在所有经过测试的框架中,它具有最小的内存占用量。WASM库在这里往往做得很好。其他都非常接近。Mithril和普瑞特Preact是最差的,但不是很多。
这里没有太多可拉的东西。您可能会认为LitElement示例可能比其他非红豆杉库更轻巧,因为它没有像其余的那样使用虚拟DOM。但是,正如我们将在以后看到的,VDOM并不意味着更多的内存。
Riot和Preact的平均排名最高,其次是LitElement,排名第三。Riot虽然没有脱颖而出,但在这个小组中没有弱点,因此取得了胜利。但是,对于这些框架中的任何一个都很难失望。借助WASM和Web组件,它们代表了许多人认为Web的未来。
但是我们还没有完成。下一组代表对网络未来的不同想法。输入编译器…
这一组是激烈的竞争。我们拥有大多数被称为编译语言的库。每个都有自己的风味。我们拥有不变的结构化Elm,受Ruby启发的Imba和"消失的" Svelte。
注意:引起我注意的是,并不是每个人都熟悉Svelte以前的"消失的框架"绰号。它描述了从输出中基本进行自我编译的能力。我不是在建议Svelte去任何地方。对带来困惑感到抱歉。
奇怪的是HyperApp,它与其他应用程序完全相反。没有编译器。没有模板。只需h函数和一个最小的Virtual DOM。
猜猜这将如何发展?
> Group 2 Performance
好吧,最小的虚拟DOM胜出。与最近的言论相反,事实证明虚拟DOM不仅是性能不佳的秘诀,而且编译并没有使其他库受益。
在已编译的库中,我们实际上看到了3种不同的方法来渲染所有具有大约相同的平均性能。Imba使用DOM协调(更接近我们之前看到的LitElement),Elm使用虚拟DOM,最后一个Svelte使用组件反应系统。
您应该注意,虚拟DOM库的选择行最差,因为这是其额外工作所显示的。但是这些库还具有更快的初始渲染。如果您仔细观察到目前为止的结果,您应该注意到Virtual DOM库与Reactive库之间的共享特性。但除此之外,性能还很严格。
因此,让我们继续。我们的编译器如何调整启动时间/捆绑大小?
> Group 2 Startup
好吧,正如您所看到的那样,这个小的虚拟DOM库不仅性能更高,而且比其他的更小。实际上,HyperApp是我们所有库中最小的实现。编译器无法赢得成功。
它和Svelte都比我们的Vanilla JavaScript参考构建小。那怎么可能?以一种更可重用的方式编写更少的代码来编写抽象。Vanilla JS实现针对性能而非大小进行了优化。
Elm在这个群体中仍处于规模竞争中。但是,Imba开始进入某些第4组库的范围。
好了,留下记忆。编译器大放异彩的最后机会。
> Group 2 Memory
内存接近,几乎是平局,但是Svelte最终为编译器赢得了胜利。对虚拟DOM的一些甜蜜的报复显示它比它更小,更快。
老实说,所有这些库都具有出色的内存配置文件。现在应该很清楚,更少的内存和更好的性能之间的关系。
不相信炒作吗?
不。更多的事情比表面上看起来复杂。精心设计的系统,无论是运行时还是编译时,或者无论采用何种技术方法,都可以制成高性能的系统。
HyperApp是该组的明显赢家,其后是Svelte,其次是Elm和Imba。通过这种对性能的专注,您知道这些库在大多数情况下都可以提供,并且始终显示在基准测试的顶部。
那还剩下什么?
如果我告诉您,声明性JavaScript库对它们的性能如此有信心,就不用担心原始WASM,Web Worker或您使用的任何技术,该怎么办。欢迎来到…
在某一时刻,它可能被称为"超快",我相信它曾经是这些库的口号之一。如果您要跟踪的话,只剩下2个库了。实际上,这类库中有少数几家不断推陈出新。但是在流行的中只有2种。它们平均比原始的手工优化Vanilla JS慢20%。
这是要看的东西。在这里,我们有2个库,如果查看它们的代码,它们可能被视为同级库,但使用的方法完全不同。Inferno是世界上性能最高的虚拟DOM库之一。在最出色的5个执行者中,有3个是虚拟DOM库。选择行测试的速度下降可以视为证据。
另一方面,Solid使用细粒度的反应性,例如第4组中最慢的旧库。重新出现此技术的位置很奇怪,但正如我们所见,Solid解决了它们的弱点。创建时间与更新时间一样快。与Vanilla JavaScript的5%差距令人难以置信。
奇怪的是,Inferno和Solid的共同点是JSX模板和React受启发的API。对于所有其他具有经过优化的自定义DSL的库,也许您不会期望在性能的顶峰找到任何东西。但是,正如HyperApp所示,某些事情对性能的影响比人们想象的要小。
> Group 1 Startup
Solid将HyperApp和Svelte作为第三个库加入,其库比Vanilla JS实现小。但是Inferno也不是懈怠。
似乎性能库较小时,有时添加更多代码可以提高性能。更好的列表协调算法,更明确的防护措施,更精细的更新。
Inferno可能比前几组中的某些库更大,但它仍然是一个10kb以下的库,并且几乎在所有性能上均不如预期。
> Group 1 Memory
在那里。除了Yew及其对WASM的使用以外,它们是整个竞争中最低的内存消耗框架。考虑到他们的表现,这并不奇怪。
这种内存消耗数字反映了对对象的非常仔细的考虑,并创建了闭包。其中很多确实来自两个库都进行的定制JSX转换。
内存性能的提高对Solid尤为重要,因为Solid与大多数细粒度的反应式库一样,都将CPU开销换成了内存消耗。在这种比较中,能够征服内存开销是Solid如何采用与大多数最慢的库类似的技术并使之成为最快的方法的很大一部分。
天空是极限。
…或者说Vanilla JavaScript是。但是我们这里的声明式库性能如此之差,您永远都不会知道它们之间的区别。当使用DOM时,我们需要认真考虑,许多不同的技术可以有效地渲染DOM。
我们在这里看到它。Solid在十年前就被认为是古老而缓慢的技术,夺得了性能冠军,而Inferno再一次证明了虚拟DOM不能高效完成的工作。
在构建JavaScript前端时,我们有很多选择。这只是快速浏览框架带来的性能开销。当涉及到应用程序中的实际性能时,用户代码具有更大的影响。
但是,我真正想在这里打动的是,测试您的解决方案并了解性能是很重要的。现实总是与营销不同。虚拟DOM不能保证很慢。不能保证编译器会产生最小的捆绑包。自定义模板DSL不能保证是最佳的。
最后,我将为您提供完整的表,将所有库一起显示。仅仅因为库快要结束了,并不一定意味着它很慢,但是与这些竞争激烈的竞争对手相比,它的得分更差。
单个图表中的所有框架。
所有结果都添加到一个列表中(第1名获得20分,最后1名获得分)。在平局的情况下,性能优先。
1. Solid (57)
2. HyperApp (54)
3. Inferno (51)
4. Svelte (51)
5. Elm (46)
6. Riot (40)
7. Preact (39)
8. Imba (36)
9. lit-html (36)
10. Yew (32)
11. Vue (29)
12. Mithril (29)
13. Marko (28)
14. Alpine (28)
15. React (19)
16. Rax (16)
17. Angular (12)
18. Knockout (11)
19. Ractive (8)
20. Ember (6)
特别提及AJ Meyghani在2018年的比较,这启发了这篇文章。
(本文由闻数起舞翻译自Ryan Carniato的文章《JavaScript Frameworks, Performance Comparison 2020》,转载请注明出处,原文链接:https://medium.com/javascript-in-plain-english/javascript-frameworks-performance-comparison-2020-cd881ac21fce)
例
设置轮廓的宽度:
p{outline-style:dotted; outline-width:5px;}
属性定义及使用说明
outline(轮廓)是绘制于元素周围的一条线,位于边框边缘的外围。
outline-width指定轮廓的宽度。
注意: 请始终在outline-width属性之前声明outline-style属性。元素只有获得轮廓以后才能改变其轮廓的宽度。
默认值: | medium |
---|---|
继承: | no |
版本: | CSS2 |
JavaScript 语法: | object.style.outlineWidth="thin" |
浏览器支持
表格中的数字表示支持该属性的第一个浏览器版本号。
属性 | |||||
---|---|---|---|---|---|
outline-width | 1.0 | 8.0 | 1.5 | 1.2 | 7.0 |
提示和注释
outline是围绕元素。它是围绕元素的边距。但是,它是来自不同的边框属性。
outline不是元素尺寸的一部分,因此元素的宽度和高度属性不包含轮廓的宽度。
属性值
值 | 描述 |
---|---|
thin | 规定细轮廓。 |
medium | 默认。规定中等的轮廓。 |
thick | 规定粗的轮廓。 |
length | 允许您规定轮廓粗细的值。 |
inherit | 规定应该从父元素继承轮廓宽度的设置。 |
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
程语言正在不断演化,但预测 5 年后会如何则很有难度,作者给出了一个答案。
作者 | Timothy Mugayi
译者 | 明明如月,责编 | 唐小引
封图 | CSDN 付费下载自 VCG
出品 | CSDN(ID:CSDNnews)
在这篇文章中,我们将看到一个我自己手动排行的编程语言和框架的列表,我相信这些语言和框架在未来 5 到 10 年内仍然坚挺。我不希望这个编程语言列表带有太多偏见。确定这个名单非常困难,因为每个人都会有些许偏见。当我草草记下我的想法时,我在思考随着时间推移编程的范式和创新是否符合演变。2020 年后,更快,更易用,更实用,更抽象的抽象技术变得流行。在此精选列表是基于我对技术的趋势、工作机会、使用情况、范例、基于流行性的统计以及未来的技术创新来预测的。
在科技界一年就像一生,因此在未来 5 年内可能会发生很多变化,但我相信这份精心策划的清单仍然很重要。如果您刚开始学习如何编程,不知道该选择哪种语言或框架,那么这份精选清单则可以帮到你。
回顾
当我们踏入 2020 年,回顾过去 5 年,很多事情都发生了改变。如区块链、深度学习、量子计算等新技术开始出现。对于那些刚刚开始学习编程甚至是经验丰富的开发人员来说,为了在这个不断变化的领域中保持与时俱进,思考自己在目前的发展状况大有裨益。现在就是学习新技术的最好时机。
为什么确保你选择和学习正确的语言或框架很重要?
学习一门新的语言和框架对你来说是一种投资,你花的金钱和时间有去无回。 技术总是在不断变化,随着年龄的增长,保持与时俱进的需求变得越来越重要。选择正确的语言和框架可能会改变你的一生,可能会彻底改变你做工作的方式和发展轨迹。因此你肯定想选择一个近几年不会过时的编程语言。
Rust
Rust 是一种系统编程语言,旨在取代 C 和 C++ 开发。Rust 提供了和 C 和 C++ 匹敌的性能,但是使用起来更加友好。对于那些已经在 c / C++ 中编写了很长时间的程序的人来说,他们非常喜欢听到这样的话。
已经有相当多的新开发者涉足这个领域。Rust 拥有不断增长的用户群。有数百家公司使用 Rust 进行开发,比如 Dropbox、 Yelp 和 Cloudflare。亚马逊最近宣布的虚拟化技术 Firecracker 这种产品也使用的是 Rust 的。在 StackOverflow 的 2016 年开发者调查中,Rust 也被评为“最受欢迎”的技术 (这意味着更多的用户会坚持使用 Rust)。
尽管与那些已经问世几十年的其他编程语言相比,它还是相对比较年轻,但它拥有大量可用的库,可以用来加速开发。你可以在 crates.io 或 GitHub 上找到你需要大多数的东西。
Rust 的主要特征
Rust 的主要特征是运行速度快和内存利用率高。它没有运行时或垃圾收集器,它适合用在对性能要求高的关键的服务,它可以在嵌入式设备上运行,并且很容易与其他语言集成。在接下来的 5 年和 10 年里,随着我们遇到硬件编程语言的限制,这些语言的速度更快,占用的内存更少,提高了速度和响应能力,使我们能够更省力的编写代码,这类语言将变得更加重要。
可靠性:Rust 丰富的类型系统和所有权模型保证了内存和线程的安全,并能够在编译时消除许多错误。
生产力:Rust 有很好的文档,提供了一个非常友好的编译器,错误信息提示非常友好。C,C++ 代码的编译器提示消息则是出了名的难以理解。Rust 的编译器则更好。如果你想学习系统编程,使用“ rustc”编译器做可以让你不用担心内存安全而能够专注其他的事情。
正如一位著名的程序员曾经说过:Pascal 就像穿着紧身衣,C 就像在玩刀,而 C++ 就像在玩弄燃烧的电锯。在这个比喻中,Rust 就像是穿着保护装备悬挂在绳子上做跑酷运动。是的,这看起来有点可笑,但是你可以用它做各种很酷的动作而不伤害自己。
Python
在过去的几年里,Python 的流行度一直在稳步上升,尤其是在过去的 10 年里,最终迈进了 TIOBE 指数的前 5 名。
Python 非常实用。对于初学者来说,它是一个脚本语言,这意味着入门非常快,不像 java 还需要编译。它的本质是面向对象的语言。在大学的许多学术课程中,Python 已经取代 Java 成为默认的首选编程语言。对于初学者来说,安装 Python 解释器并运行非常容易。
$ print (‘hello world this is my. First program’)
如上述代码所示,你的第一个程序就这样用 Python 写完了。
Python 正在为未来铺平道路。它在未来 5 年乃至更长的时间段内都将具有较大影响力。Python 已经让机器学习、深度学习、人工智能、大数据等所有流行的数据科学流行语等新的技术范式成为可能。互联网上有大量成熟的库,如 TensorFlow、 Scikit-Learn、 Dask for distributed Data Science 大规模可扩展计算, Python 也可以用于量子计算。虽然我们离量子计算还相对较远,但是 Python 是一个可以确保你作为一个量子程序员的地位的语言。
Python 在企业和初创企业中都很受欢迎。在过去 5 年中已经取得了巨大的进展。现在一些使用广泛的平台,比如 Reddit和许多 Google 库都是建立在 python 之上的。
我个人使用 Python 编写脚本并快速自动化许多任务。它一直是一种让自由职业者快速完成项目的不可多得的语言。
Python 提供了可以访问网络框架,比如 Django 框架,它是构建前端和后端网络应用的最好的 Python 框架之一。坚持 DRY 原则快速构建应用程序的哲学,需要很少的代码量和需要很少的编程经验。
Ruby
Ruby 是另一个功能强大的高级语言,它可以让你轻松地构建应用程序。作为面向对象程序设计语言,对于那些有 Python 开发经验的人来说,Ruby 语法看起来与 Python 非常相似。该语言还配备了构建复杂应用程序所需的所有工具。
许多硅谷的初创公司都是建立在 Ruby 之上的,比如 Airbnb、 Twitch、 GitHub 和 Twitter。Ruby on Rails 是一个运行 Ruby 的全堆栈 Web 应用程序框架,这让 Ruby 更加流行。
Ruby 的一些关键特性:
提供了一个健壮的高质量库。
语法简单,有助于快速开发原型。
学习门槛低,新程序员很容易上手。
是一种面向对象程序设计语言,所以你可以拥有一切面向对象语言的优势。
由于 Rust 的内存占用很小,可用于构建分布式在线服务或网络服务。
Golang
Go(Golang)是 Google 开发的一种相对较新的编程语言。它最近越来越受欢迎。 提供了极好的多线程支持,因此,许多严重依赖分布式系统的公司都正在使用它。它是为解决谷歌面临的一些棘手问题而设计的。谷歌还将 Go 作为新项目的主要语言,并用 Go 取代其他语言。因为谷歌与我们的日常生活息息相关,所以我们不可能忽视它,认为它在可预见的未来将继续保持活跃。
我必须承认,它是一门非常优雅的编程语言,语法很简洁。它在动态类型语言、解释性语言的易用性和类型安全、内存安全之间取得了平衡。
主要功能:
由于有内在并发支持,它可以有效提高 CPU 利用率。擅长云系统开发,分布式系统,微服务。
轻量级、执行速度快和开发效率高。
内存占用和二进制文件较小。
自动垃圾收集。
无异常,它自己处理错误, 等。是的,你没看错。这对你来说意味着什么?您必须准确地知道如何自己处理这些错误,而不是抛出一堆 try-catch 异常。仔细想想是不是这样?
有趣的事实:
全球 Go 语言开发人员平均年薪: 109,483 美元。在美国,这种顶级编程语言的平均年薪为13.6 万美元。
在 2019 年 Stack Overflow 开发者调查中,Go 是全球排名第三的高薪语言。
GitHub 上第四活跃的编程语言。
GraphQL
与今天相比,以前的 Web API 设计相对简单,有用于从服务器检索数据的 REST 表示状态转移标准,该标准是基于URL来访问数据的。
然而,需求增长超过了标准。数据不再是之前静态的样子了,它更加动态,因此 GraphQL 应运而生。GraphQL 是 REST 架构的替代方案,旨在克服REST的缺点。与 REST 不同,GraphQL 允许脱离固定数据结构方式来请求客户机需要的特定数据。在后端,GraphQL 向 API 指定如何向客户端显示数据。GraphQL 通过 API 重新定义了开发人员的工作,这些 API 为市场提供了更多的灵活性和速度;它改善了客户机与服务器之间的交互,使前者能够进行精确的数据请求,准确的获得他们所需要的东西。
最初由 Facebook 在 2012 年创建,GraphQL 内部用在他们的移动应用程序,通过其特定的数据获取功能来减少网络使用。从那时起,GraphQL 规范开源了。现在主要的编程语言如 Python,Java,c # ,Node.js 等都支持它。
由于其生态系统的快速扩张,这使得它成为在可预见的未来继续坚挺的技术之一。它有丰富的扩展库和功能强大的工具,如 Apollo、 GraphiQL 和 GraphQL Explorer。
GraphQL 的一些关键特性:
查询速度更快,选择查询的字段减少请求。
非常适合复杂系统和微服务。通过其 API 集成多个系统。
GraphQL 可以将来自多个地方的数据聚合成单个 API。
不存在过多或过少抓取的问题。众所周知,REST 响应要么包含过多的数据,要么包含的数据不够。
验证和开箱即用的类型检查。
自动生成 API 文档可取代 Swagger,并且在 GitHub 问题中可以找到使用规范。
无版本的 API 演进,这是 REST 的一个常见问题随着 API 演进,你不得不创建一个新的 API 或者在 URL 前面加上版本,并且有无可挑剔的文档。通过使用 GraphQL,你可以得到一个单一的、不断发展的版本,这使你的应用程序可以不断地访问新特性,并且鼓励编写更简洁、更易维护的服务器代码。
GraphQL 并不是试图取代 REST,它们是解决不同类型问题的两个不同的东西。随着我们迈向大数据,投入一些时间学习 Graphql 就非常有必要。
Angular
Angular 由 Google 开发的,一种用于软件开发的成熟的 TypeScript 框架。它是构建 web 和移动应用程序的主要开源框架之一。Angular 是一个完全基于 AngularJS 改写的。从 AngularJS 开始,它在刚开始的时候就具有一定的影响力,现在 Angular 经过多年的发展,它已经发展成为一个全面的开发框架,其中包括了构建网络和移动应用所需的所有工具和组件。这个框架的美妙之处在于它遵循着一个清晰的路线图,每六个月发布一个新的 Angular 主版本,如果你想长期使用 Angular 的话,这点很重要。
Angular 的主要特征:
下面只讨论 Angular 9 中提到的特性,这些特性可能会解决性能问题。
Google 为这个框架提供了长期的支持,并不断地改进它。定期改进非常受追捧,这表明这个框架有一个充满活力。因此,鉴于谷歌正在支持它并对其进行投资,表明该框架在可预见的未来仍将具有相关性。
Angular 9 的另一个关键特性是通过 Ivy Compiler 减少了大包文件,从而占用了很小的空间 —— 试图通过减少 JavaScript 包的大小,Ivy 加快应用程序启动。
为需要支持多种语言的应用程序提供更好的国际化支持。
JavaScript
我斗胆说一句:JavaScript 是一个不可替代的语言,毫无疑问它将在未来的几年里继续存在。因此,投资学习这门语言非常划算。它不仅仅是一个客户端的开发脚本语言,通过像 Node JS,Angular 和 React 这样的框架和库,你还可以在服务器端使用 JavaScript 来开发用户界面。
JavaScript 是所有大型科技公司的核心,比如 Netflix,Facebook,Google 等等。因此,JavaScript 作为一种语言和其他编程语言一样都具有合法地位。2020 年是开始投资的一年。把你的空闲时间投入到学习 JavaScript 上来吧。
现在想一想,几乎所有的网站都在某种程度上使用了 JavaScript。
荣誉奖
Webassembly ( 缩写为 Wasm) 应该获取荣誉奖,但不能成为前 7 名,因为它既不是框架也不是编程语言。
Wasm 被设计为编程语言的编译目标和二进制格式,其目标是为 web 应用程序提供接近本机的性能。这意味着什么?把它想象成一个公共的中央平台,开发人员可以将各种编程语言编译成 web 汇编,然后在这个平台上运行它们。另一个类比是它是所有编程语言的 Java 虚拟机。
从本质上讲,每当您在 Internet上通过 Web 浏览器运行应用程序时,Wasm 都将目标定为 Web 应用程序的近乎本机的性能,在接下来的 5 年中,大多数情况都需要用到 Wasm。想想那些需要完美表现的网络游戏吧。通过点击一个按钮,你就可以从服务器下载应用程序代码,并将其加载到运行 Wasm 的浏览器虚拟机中。Wasm 得到了如 Mozilla,微软,谷歌和苹果等大企业的支持。
这种 Web 汇编的广泛应用鼓励去中心化计算,例如 Ethereum 正在着手开发 ether 2.0,在本文撰写之时,Ethereum 将利用其新提出的重新设计智能合同执行层的建议,使用 WebAssembly 的确定性子集。在这个巨大的数字化空间里,学习模型正逐渐成为软件开发人员构建、人与应用交互的技术支柱。
Web 汇编可以让 JavaScript 做它擅长的事情,并将它不能做的部分委托给其他语言。可以把它想象成下一代 Web Ajax。Ajax 使客户端应用程序成为可能。Web 汇编允许您超越仅仅使用 JavaScript 进行节点或 JavaScript 可能不擅长的复杂的低级计算。因此,web 汇编的未来看起来是前途一片光明。
总结
如果你仔细想想,所有的编程语言和框架都有能力构建复杂而强大的功能, 都可以构建解决现实世界中紧迫问题的应用程序。没有放之四海而皆准法则,因为每种语言和框架都有其优势和不足,以及有意义或无意义的地方。对语言的需求是由用例、市场需求或使用该专业知识的资源库驱动的。
永远记住,任何编程语言或框架的目标都是完成任务,要选择最适合你的技术。
真正的敏捷适应性和迭代学习才能真正让你在未来几十年保持与时俱进。就我个人而言,作为一个通晓多种语言的开发者,这为我敞开了大门
如果你喜欢这篇文章,那么请与你的朋友和同事分享,如果你认为这些语言在未来 5 年内将不再适用,那么请评论,我也很乐意听到你的声音。
英文:Top 7 Programming Languages & Frameworks To Learn in 2020 That will Still be Relevant In 5+ Years
链接:https://medium.com/swlh/top-7-programming-languages-frameworks-to-learn-in-2020-that-will-still-be-relevant-in-5-years-11245d7e2d56
作者简介:Timothy Mugayi。技术传播者,讲师,多语言开发者,热爱技术创新
译者:明明如月,知名互联网公司 Java 高级开发工程师,CSDN 博客专家。
*请认真填写需求信息,我们会在24小时内与您取得联系。