校对 | 张仕影 白眉林 | 郑丽媛
公司出品 | CSDN(ID:CSDNnews)
架构间的论争一直年来都是 JavaScript 街道社区的热点话题,也是业界的盖达众所周知。从刚开始的 jQuery,到而后的 AngularJS,再到当代架构,有关的探讨未曾停息。
参加者
好景不长 JavaScript 那场架构“内战”开始年来,Backbone 与 Sencha 等架构渐渐“失血过多”,在遭遇战中折断了,它所遗留留下来的只有大批需要保护的标识符。而生存留下来的,像 jQuery 则显得愈来愈强悍,现如今保有两个十分大的街道社区;除此之外生存留下来的还有像 Angular 这样没有市场预期中发展得那么好的架构,让人略感惋惜。
jQuery
jQuery 是两个加速、简约的 JavaScript 架构,它可能是现阶段为数不多的参赛选手了。虽然 jQuery 曾复原了应用领域程序间的整合性,因而它十分盛行,但它的应用领域却极难扩充。
不过现如今,jQuery 早已不是非主流架构众所周知,也无须是绝大多数工程项目的最差优先选择。
AngularJS
AngularJS 作为两个如前所述 JavaScript 的开放源码后端架构,现阶段它早已达到了开发周期中止的状况(EOL),今后将无须赢得任何人全力支持与保护,Angular 工程项目组期望原有使用者能北迁到新一代的 Angular 架构中。
虽然它曾是架构生态系的一次十分大脱胎换骨,因而有许多人依然想念它。但因为它早已无须被积极主动保护了,所以算不上是两个竞争对手。
Angular
Angular 是现如今高效和开放源码的 JavaScript 架构众所周知,起初它的诞生是为了与 React 竞争。随着 AngularJS 愈来愈老,出现许多问题,而 React 却发展得很好的情况下, AngularJS 工程项目组决定对其进行当代化改造,将 AngularJS 重写为 Angular。
Angular 最令人感到繁琐的应该就是其陡峭的学习曲线,它需要很多概念,因为并不是所有东西都是直截了当的。想要学好 Angular 是很不容易的——它既继承了 AngularJS 的学习曲线,又有像 RxJS 或分层依赖注入这样的困难之处。
(Ben Nadel 的原图)
Angular 存在的另两个问题是它至今还有许多目标没有达成。例如,好景不长 Angular 2.0 年来,许多人都期待能有两个简单的方法来创建服务器端渲染的页面,但直到 2022 年 2 月,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
SvelteJS 是两个渐渐强悍的竞争对手,它声称自己的主要优势是在构建时会将组件转换成高效率执行的命令标识符。据 SvelteJS 表示,这比 React 采取的声明式更好。
SvelteJS 使用起来的确更简单,但转换成命令标识符以及生成的组件并不像看起来那么容易。在某些情况下,SvelteJS 无法正确检测更改,当这种情况发生时,状况可能会被破坏并且视图也不会正确更新。这个问题引起了很多关注,导致 SvelteJS 像过去的 VueJS 一样,极难证明它其中的工程项目都是合理的。
StencilJS
StencilJS 作为如前所述 Web Components 设计的架构,从技术上讲,StencilJS 并算不上是真正的架构。实际上,StencilJS 允许编写组件,并将其翻译到其他架构。现如今,它可以将组件转换为 Angular、React、Vue 和 Web Components 组件。
Mitosis
你可能并没有听说过 Mitosis,但正是因为它让我写了这篇文章。Mitosis 是 Angular 的创建者 Misko Hevery 开发的最新架构,并且 Mitosis 与 StencilJS 具有相同目标—— 将其组件转化为许多架构。
React
React 是最古老的当代架构众所周知,在 npm 存储库中有超过 10 年的历史。尽管现如今 React 早已发生了很大的变化,但它仍然与绝大多数以前的版本兼容。近年来,React 发展得愈来愈好,有人表示,是 React 钩子(React 函数组件的副效应,用来为函数组件引入副效应)创建了这个更好的架构。
不过 React 最厉害的地方并不是它的钩子或是任何人可见的功能,而是别的地方——React 推动了 JavaScript 的最新标准,也推动了 JSX 的发展。React 无须是两个架构,但也许它从来都不是——它只是两个库。React 努力地推动标准,最后,它将自己从使用者标识符中移除。
最后的获胜者
获胜者当然就是……React,不过这并不是 React 本身,而是其背后的哲学。React 本身就是两个库,它可以被许多其他库所取代,例如 Preact 或 React Native。但如果你仔细观察,会发现 StencilJS 或是 Mitosis 与 React 十分相似,这并不是两个巧合,因为:
“最好的架构是将自己从使用者标识符中剥离出来的架构”
React 在很大程度上利用了 JavaScript 和 JSX(嵌入了 XML 的 JavaScript),而且使用者标识符对 React 来说是不可知的,只要稍加调整,完全相同的标识符就可以在其他架构中运行。
因而,毫无疑问,React 是架构一役的最后输家。
“赤裸裸的谎言”
作者 David Rodenas 在这篇文章中陈述了他对于 JavaScript 架构的不同观点,以及他心目中的输家,但许多网友对于此都持有相反意见:
@Brandon Taylor:“这篇文章完全在是胡说八道。当说到 Angular 是支离破碎的并且难以升级时,我立刻停止了阅读——这简直是两个赤裸裸的谎言。要知道升级 Angular 再简单不过,而且 Angular 并不比任何人其他架构更难学习。
@Marcos Sandrini:“作者写这篇文章只是为了寻找理由来证明他对 React 感到满意,而不是 React 是否让其他人满意这一事实。”
@P Bergqvist:“这是我读过的最糟糕的文章众所周知。当文章提到 jquery 是两个架构时,就早已失去所有的可信度了。”
@Attila Vágó:“我只知道没有任何人高级软件工程师会得出这个结论,或是像文章中那样进行比较,这是肯定的。”
那么,你对于这篇文章的观点持有什么看法?
参考链接:https://medium.com/codex/the-javascript-framework-war-is-over-bd110ddab732