尤雨溪:React为什么如此流行

645 阅读11分钟

近日尤大大转载了一篇文章,很好的解释了React为什么如此流行。 本文来自尤大大转载文章的翻译

image.png

前言

现在浏览几乎所有前端工作职位,你很可能会发现一个无处不在的资格:React。 (“或类似的前端框架,”更开明的雇主可能会补充说。他们甚至可能会列出一些示例。但 React 肯定会在那里。)

但是,在 2022 年,我不得不想知道为什么。因为除了流行之外, React并不擅长任何事情。

不要误会我的意思:React很好。即使我不是一个React粉丝,也欣然承认这一点。让我在 React 和完全没有前端框架之间做出选择,如果项目足够大或足够复杂,我会很乐意选择 React,非常感谢。

React为其他框架正在做和已经做的很多事情奠定了基础。 Vue3及其组合 API 显然受到了React Hooks的启发。 Svelte 的许多约定都来自 React。 Nuxt是我使用和喜爱的Vue框架,它的许多想法(以及其名称的75%)来自 Next,一个 React框架。就此而言,前端设计和开发的整个基于组件的模型在很大程度上归功于 React。

但这就是我的全部观点:就像以前时代定义流派的电影、专辑或视频游戏一样, React 的伟大更多在于它在当时的意义,以及它所激发的灵感,而不是它现在的样子。

好吧,我承认这个类比有点过头了。诚然,React与其同时代产品之间的差异远小于Citizen Kane与一部现代伟大电影之间的差异,或者 NES 上的原始塞尔达传说与Switch上的荒野之息之间的差异。

也就是说:React 已老了。而且我认为大多数人尤其是那些经常使用它的人,并没有意识到它有多糟糕。

当你只生活在 React 的世界里时,你可能只会看到改进。似乎React一直在变得越来越好。在很多方面它的确如此。但是这种观点使您无法意识到React的速度及其上限长期以来一直落后于其同类产品。React做了它擅长的事情,但它并没有比其他框架做得更好。

工作的最佳选择

假设您是一家全新科技初创公司的CTO,或者是一位开始构建某种新网络软件产品的独立企业家。

你面前有一个项目;你可以选择任何你喜欢的技术来构建你的项目。你如何调用你将在未来几年使用的前端框架?这里假设你的项目有足够的规模和复杂性,没有前端框架根本不是一个好的选择。

有很多事情需要考虑,包括:

  • 性能
  • 学习曲线
  • 包的大小
  • 可扩展性
  • 社区和支持
  • 财务支持
  • 开发者经验
  • 可雇佣性

我认为在所有这些领域,React可能是一个糟糕的选择。

性能

您可以通过许多不同的指标来衡量性能,但无论您的具体关注点是什么,React都不是最佳选择。Vue、Svelte、Solid、Inferno 和许多其他语言通常提供了比React更好的性能。根据您的需要,您可以使用Alpine或Petite Vue之类的东西来实现更简约(尽管我认为它们不值得与其他产品归为一类)。

React性能相关的领域有很好的文档,所以我觉得我们不需要在这里深入探讨。但足以说明:如果你的目标是构建你能构建的最高性能的东西,那么React不是你正在考虑的。

Preact是React的最小版本,在这种情况下值得考虑,但它与React有足够的不同,它可能是也可能不是 1:1 的替代品,所以我不认为它是同一个东西。另外:虽然 Preact 的性能明显优于 React,但它不一定优于上述领域中的其他一些竞争者。

学习曲线

假设您对任何前端框架一无所知,React绝对不是最容易学习或使用的。JSX是一个笨拙地将HTML硬塞进JavaScript函数返回的拼凑物。 除了JSX之外,React本身也有自己的一系列独特的约定和错误。

在React中,许多其他前端框架为您处理或变得非常简单的事情,都需要你手动干预或重要的样板代码。几乎每个框架最初都是为普通人群构建的。除了React,它最初是为Facebook工程师构建的。

我确定我不需要在这里提出useEffect问题。或者你不能在 JSX 中使用一些标准的 HTML 属性(因为JSX不知道 React prop 和 HTML 属性之间的区别)。或缓存,或没有真正的条件,所以你必须依赖短路运算符。或者如何防止无限循环……

包的尺寸

这类似于速度,但我觉得有必要区分两者。如果通过网络发送的大量包在下载后转化为更好的性能,那将是一回事,但这里不是这种情况。 当涉及到小包时,React绝对不会领先其他框架。关于这一点已经写了很多,所以我不会再重复了。

然而,我会提到:有些人过去认为React大多数时候会从缓存中加载,所以它的包大小是无关紧要的。这始终是一个虚假的声明,在现代浏览器中不再是这种情况,因为安全升级阻止了域之间的缓存共享。

可伸缩性,可扩展性

虽然React确实有最多的公司和应用程序展示了其大规模执行的能力,但我认为说数量等于质量是不公平的。

每个前端框架,从 Vue 和 Svelte 到 Angular 和 Ember 等等,都具有大规模执行的能力。React在这里没有什么特别的;它只是有最多的使用案例。如果这就是你的安全理念,那就这样吧。但是说React在这里确实展示了更好的能力是不公平的。它只是被赋予了更多的机会。

社区和支持

我在另一篇文章中谈到了这一点(尽管专门针对 Svelte),但总结一下:React拥有最大社区。虽然这样,并不一定使它成为更好的选择。

庞大的社区也可能是一个缺点,这可能意味着有太多的包可供选择,以及太多不同的、相互竞争的意见,您必须在两者之间做出决定并采取立场。

但除此之外,更大并不一定意味着更好。有一个社区足够大的地方,产品不一定会继续变得更好。

一开始,更多的参与会创造出更好的东西。但是有一个收益递减点(以及通信成本开始减慢而不是加速项目的点)。

成为最大社区的一员会让人感到非常欣慰,因为这似乎是一种额外的安全感。船上的人越多,他们就越不可能让它沉没。你不需要在最大的船上。你只需要穿着足够大的衣服来抵御风暴,而且有很多可供选择的。

财务支持

有些人非常担心他们选择的框架有一天会消失,如果它不再得到支持和维护。 

Angular由谷歌支持。 Vue是历史上最成功、资金最充足的开源项目之一。 Vercel目前雇用至少两名Svelte维护人员(包括 Svelte 的创建者)全职从事该项目。 Solid拥有超过100名贡献者和至少六家大型企业赞助商。

显然,在主要的前端框架中,支持不是问题。所以这也不是真正有利于 React 的任何一点。

开发者经验

虽然React很容易成为最常用的前端框架,也是最受关注的框架,但在今年的JS现状调查结果中,React在满意度方面排在 Solid 和 Svelte 之后。React在兴趣方面也排在 Svelte、Solid 和 Vue 之后(对于React,低于 50%)。

State of JS只是一个调查,但是其他类似的调查也讲述了一个类似的事情。例如,在 StackOverflow 调查中, React 远远落后于 Svelte,仅略微领先于Vue。

因此,虽然开发人员显然都知道并使用 React ,但说这是他们最感兴趣或最满意的东西似乎并不公平。

因此,虽然开发人员显然都知道并使用React ,但说这是他们最感兴趣或最满意的东西似乎并不公平。

可雇佣性

这是React绝对领先的领域。然而,我认为这不是选择框架的重要理由。考虑到您的应用程序将具有更大的包、更低的速度和更高的复杂性,正如我们所讨论的那样:在其他领域几乎没有任何好处,选择React只是为了让新开发人员更快地启动和运行项目,是短期收益换长期损失。

这些赌博可能会有回报,但也可能不会。他们通常现在给你几个星期的时间,但要付出几个月的时间。因此,尽管这确实是一个真正的好处,并且是React可以说是领先的领域,但优先考虑它不一定是一件好事。

另外,如果您已经了解React,那么学习另一个前端框架对您来说应该不难。任何了解React的优秀开发人员都可以并且将会使用任何框架提高工作效率。

我了解在商业世界中,需要权衡取舍。开发速度是一个重要的考虑因素。出于其他充分的理由和优势,您可能会认为具有较低速度、较大捆绑和较高复杂性的选项仍然值得。

为什么React保持领先地位

因为我们并不总是像重视共识那样重视最强的选择。React不断被选中……因为 React 不断被选中。

曾经有一段时间, React是被默认选择的,当时人们出于其他原因选择它。它解决了他们遇到的问题,或者它是新的和有趣的,或者其他可能的原因。因为它可能有助于他们进入就业市场。

那个时代已经过去了。现在,大多数人选择React纯粹是为了熟悉和安全。

公司一直选择React ,因为他们知道有大量的候选人知道React;候选人继续学习React,因为他们知道公司正在为此招聘。这是一个自我维持的循环。

在没有强烈的业务需求的情况下,市场的双方--招聘者和试图获得聘用的人--都会被激励联合起来。无论好坏, React是他们共同的依赖。

什么时候以及何时改变

这是我真正感兴趣的部分,看过过去几年的发展。

我没有答案。正如我之前提到的,根据 State of JS, React具有扁平化的组合。(这可能意味着它实际上在增长,但三年来它一直保持着80%的比例,这似乎并不是持续采用的强烈迹象。)

也许随着其他框架越来越多地证明自己,公司开始选择他们拥有的其他选择。虽然我认为大多数公司不会这样做,但毫无疑问会有一些公司使用 React达到性能上限,并根据业务需要迁移到性能更高的框架。

这里还有一个想法:我们可能已经超越了React ,但我们还不能从更高的层次上看到它。现在招聘的公司很可能是很久以前就已经在框架上做出选择的公司。

我不知道前端的未来是什么样的。没有人真的这样做。但可以肯定的是,React将在很长一段时间内继续发挥作用。

如果你学习前端开发是为了找到一份工作,或者试图提升你的职业水平,而React对你来说是一个知识缺口,这似乎是你可以做出的最安全的选择。React不会很快消失。

然而,就是说:我希望越来越多的开发人员会探索其他选择。我希望公司考虑新的项目的其他候选人。近年来,我在前端发现的大部分乐趣都归功于Vue和Svelte。以我个人的看法和经验, React完成了工作,但并没有使工作变得有趣。

我确实看到了其中的一些情况,因为越来越多的开发人员开始怀疑其他框架炒作。我希望更多的人会继续探索其他的选择,如果没有其他原因的话,未来前端开发人员的可能性会更加多样化。

reference

原文:joshcollinsworth.com/blog/self-f…