究竟是什么让ReactJS像它声称的一样快?

时间:2015-10-26 20:37:38

标签: javascript performance reactjs

我正在学习ReactJS并尝试理解真正使其“更快”的内容,并且比其他框架和库提供的解决方案更加特殊。

我知道以下事项:

  1. Virtual DOM以及React如何运行差异以获取最少的步骤以确定“更改”并相应地响应/重新呈现,而不是传统的“脏检查”操作在其他框架/库中。
  2. 通过“可观察”模式进行更多的声明性而不是强制性的编程。
  3. 所以,上面的陈述在概念上对我来说听起来都很好,但是,当我考虑现实生活用例和实践时,我没有想到好处:

    1. 考虑使用jQuery

      $("#box").removeClass('red').addClass('blue');

    2. 与React方式做同样的事情,它是如何“慢”的?我理解它的方式,jQuery将直接从DOM中获取1个匹配id值为“box”的元素,并按照指示删除并添加类 - 所有特定于DOM中的元素。 (它是否在此处实现“脏检查”以查找#box?)

      使用ReactJS,它将首先在其Virtual DOM中进行相同的更改(在执行diff以查找具有最少步骤数的#box之后)并将元素重新呈现为实际DOM。因此,如果有的话,它似乎是在增加一个与VDOM进行比较的额外步骤。

      1. 可观察的模式一直存在。为什么它是第一次应用于事件处理操作?...做类似的事情:
      2. “嘿,这里发生了一些变化(触发了事件)......所以让我们看看我们应该做些什么(运行与事件绑定的所有事情)并做到这一点”

        非常感谢任何见解,指示和示例!

3 个答案:

答案 0 :(得分:5)

你可能是对的,在这种情况下jQuery可能会更快(我还没有测试过)。但是考虑一下,你为什么要使用jQuery - 如果你做的话,那就不会更快

document.getElementById("MyID").className = document.getElementById("MyID").className.replace(/\bred\b/,'');
document.getElementById("MyID").className = document.getElementById("MyID").className + ' blue';

所以,我们并不是想在这里竞争原始速度,否则你只需要用纯粹的javascript编写,我知道这样做的公司纯粹是为了在移动设备上更快。

框架的好处是维护和开发速度。纯javascript编程比jQuery更难扩展和维护,类似的jQuery编程比React更难扩展和维护。虽然反过来也是如此,但使用jQuery获得具有最小功能的应用程序要快得多(但是在构建mvp之后,维护变得更加困难)

在小代码库中,jQuery可能比React更快,但是当你使用更大的代码库时,你会在jQuery中找到大量的重复和冗余代码,它本身就变得更慢了。然而,反应是不同的 - 首先是React,将所有内容分离到组件中以便更容易重用,第二个React有一个很酷的内部引擎,可以防止无用的渲染减慢你的应用程序。

所以是的,你是对的,jQuery可以比React更快,但这确实错过了React的观点。正如纯javascript可能比jQuery更快,但是缺少jQuery的观点。

答案 1 :(得分:3)

React不是特别快,它足够快。 React的真正价值在于它提供的声明性API,可以让你编写更好的代码。

手动DOM操作具有更高的潜在性能,但最终会导致难以维护,难以阅读的代码。这在大型应用程序中是不可接受的,这就是为什么我们转向像React这样的工具。

Virtual DOM diffing很昂贵。通常,不够昂贵,导致你丢帧。更新的1ms和16ms之间的差异是 nothing 。重要的是你保持在框架内,这就是为什么React的性能开销是可以接受的。

答案 2 :(得分:0)

令人惊讶的是,基于两个公认的答案,我们可以了解到jQuery实际上比React更快。

我感到所有这些反jQuery的嗡嗡声都带有高度偏见。现在得到我的证明。

祝大家开心!