JavaScript 框架之战已经结束
赢家只有一个。
摄影:Markus Spiske on Unsplash
选手
框架之间的战争是JavaScript社区中的热门话题,也是该行业众多圣战之一。从一开始,随着jQuery,其次是AngularJS到现代框架,战争一直很激烈。
许多人已经倒在了这条路上,比如Backbone或Sencha,留下了尸体:大量的遗留代码必须维护。其他幸存下来,比如jQuery,令人惊讶的是,它仍然有一个庞大的社区。其他的,如Angular,似乎没有像预期或承诺的那样起飞。
jQuery
它可能是现存年龄最大的参赛者。它非常受欢迎,因为它修复了浏览器之间的互操作性,但应用程序很难扩展。
如今,jQuery已经不是主流之一,也不是大多数项目的最佳选择。
AngularJS
它已经处于LTS模式,并且已经退休,以支持其老大哥。毫无疑问,这是框架生态系统的一次巨大飞跃,我们中的一些人仍然怀念它。
但是,由于它不再积极维护,因此它不再是参赛者。
角
它来到世界是为了与 React 竞争。AngularJS正在变老,它有性能问题,健壮性问题,随着React变得更好,许多程序员用羡慕的眼光看待React。Angular 对 AngularJS 进行了现代化改造,以利用 ECMAScript 6 的最后改进,并试图履行与 React 有效竞争的承诺。
Angular最突出的难度是其沉重的学习曲线。它需要很多概念,并不是一切都是直截了当的,它有很多死胡同。很好地学习Angular是很困难的:它继承了AngularJS的学习曲线,但遇到了新的困难,比如RxJS或分层依赖注入。
Angular的其他担忧是它违背了很多承诺。例如,每个人都期望V2有一个简单的方法来创建服务器端呈现的页面,但是现在,2022年2月24日,Angular.io 网站本身在没有JavaScript的情况下无法工作。
但Angular最大的问题是碎片化和版本升级。升级版本非常困难;它是如此困难,以至于用户不会冒险升级其应用程序。可以在npm网站中看到。
有很多旧版本的用户。
VueJS
Vue是许多开发人员的答案,他们需要比AngularJS更高性能的东西,但比Angular更稳定,更易于使用。Vue在其模板系统中非常接近原始的Angular,保持了AngularJS的简单性,但与此同时,它从React获得了一些功能。
但是 VueJS 在版本 1 和 2 中遇到了一个严重的问题:它不能很好地处理数组,作者指责 JavaScript 对更新算法的选择不佳。如果您不使用像Vuex或Redux这样的库,则可能会遇到严重的问题。你可以在这里看到一个在AngularJS中工作的应用程序,但在VueJS中不起作用。
摘自 Vue 文档,他们指责 JavaScript 存在其更改检测算法的局限性。
从理论上讲,这个问题在版本3中得到了解决。但是,将自己的错误归咎于他人并不适合社区。
Sveltejs
它是战争中不断增长的竞争者,并且正在做出巨大的承诺。它声称它的主要优势是将组件翻译成命令式语言,根据他们的说法,它比React采用的声明性语言更好。
毫无疑问,它使用起来更简单,但是转换为命令式以及由此产生的组件并不像看起来那么容易预测。在某些情况下,SvelteJS无法正确检测变化。发生这种情况时,状态可能会损坏,并且视图未正确更新。这个问题引起了如此多的担忧,以至于很难证明SvelteJS中的任何项目都是合理的,就像过去使用VueJS一样。
https://twitter.com/drpicox/status/1496461071334490112
StencilJS
好吧,从技术上讲,它不是一个框架,尽管它是。StencilJS允许编写组件,并将其转换为其他框架。如今,它将组件转换为Angular,React,Vue和WebComponents组件。
但是,这个类有一些奇怪的东西。这真的类似于另一件事,对吧?
有丝分裂
你可能没有听说过它,但它是让我创建这篇文章的人。有丝分裂是由Angular的创建者Misko Hevery创建的最新框架。没错,Misko在Angular之后创建了另一个框架。
有丝分裂与StencilJS具有相同的目的,它将其组件转换为许多框架。顺便说一句,代码是否类似于任何其他框架?
反应
它是最古老的现代框架之一,在npm存储库中已有10多年的历史。尽管它已经发生了很大的变化,但它仍然与大多数以前的版本兼容。所有的变化都变得更好了。有人说,带有钩子的 React 创建了一个更好的框架。
但 React 的最佳质量不是它有钩子或任何可见的功能,而是相反。React 已经推动了 JavaScript 的最新标准,并推动了 JSX 的发展。React 不再是一个框架,也许它从来都不是,它只是一个库。它如此努力地推动标准,以至于它最终将自己从用户代码中移除。
赢家是...
新浪网.好的,React,但不是React本身,而是背后的哲学。React本身就是一个库,但它可以被许多其他库所取代,比如Preact或React Native。但是如果你仔细观察,StencilJS或有丝分裂与React非常相似,这不是巧合,这是因为:
React 大量利用 JavaScript 和 JSX(嵌入了 XML 的 JavaScript),并且用户代码与 React 非常不可知,只需进行很少的调整,完全相同的代码就可以在其他框架中工作。
因此,毫无疑问,React 是框架战争的赢家。因为它不是用户代码中的框架。