javascript - 是什么让 ReactJS 像它声称的那样快?

标签 javascript performance reactjs

我正在学习 ReactJS 并试图了解是什么让它比其他框架和库提供的解决方案“更快”和更特别。

我知道以下内容:

  1. Virtual DOM 以及 React 如何运行差异以采取最少的步骤来确定“更改”并相应地响应/重新呈现,而不是其他框架中的传统“脏检查”操作/图书馆。
  2. 通过“Observable”模式以声明方式编程,而不是命令式实现。

因此,上述陈述在概念上对我来说听起来很不错,但是,当我考虑现实生活中的用例和实践时,我无法想象这些好处:

  1. 考虑使用 jQuery:

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

它比以 React 方式做同样的事情“慢”在哪里?按照我的理解,jQuery 将直接从 DOM 中获取 1 个具有匹配 id 值“box”的元素,并按照指示删除和添加类——所有这些都特定于 DOM 中的这个元素。 (它是否在此处执行“脏检查”以查找#box?)

使用 ReactJS,它会首先在其虚拟 DOM 中进行相同的更改(在执行 diff 以使用最少的步骤找到#box 之后),然后将元素重新渲染到实际的 DOM。因此,如果有的话,它似乎添加了一个与 VDOM 进行比较的额外步骤。

  1. Observable 模式一直存在。为什么它是第一次应用于事件处理操作?..做类似的事情:

“嘿,这里发生了一些变化(事件触发)......所以让我们看看我们应该做什么(运行绑定(bind)到事件的所有内容)并执行它”

如有任何见解、建议和示例,我们将不胜感激!

最佳答案

您可能是对的,在这种情况下 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 将所有内容隔离到组件中,因此它变得更容易重用,其次,React 有一个很酷的内部引擎,可以防止无用的渲染减慢你的应用程序。

所以是的,你是对的,jQuery 可以比 React 更快,但这确实没有捕获 React 的重点。就像纯 javascript 可能比 jQuery 更快一样,但这没有捕获 jQuery 的重点。

关于javascript - 是什么让 ReactJS 像它声称的那样快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355125/

相关文章:

c++ - 优化 Linux 套接字

sql - 改进这个可能的5连接SQL语句

javascript - 在 React 项目中导入 Unity 文件

reactjs - 在 render() 中 react setState

javascript - 如何设置 useEffect 在第一次使用 eslint-react-hooks 渲染时从 API 获取数据?

cocoa - 哪种检查 NSDictionary 是否包含特定键的方法更快?

javascript - jstree 3 获取目标被丢弃的位置

javascript - JqueryUi resizable issue, alsoResize expands beyond containment!

javascript - 清除输入框在某些条件下的 react

javascript - 在 Modal 的子组件中设置时,不会触发 BackAndroid/BackHandler 事件监听器