我正在学习ReactJS
并尝试理解真正使其“更快”的内容,并且比其他框架和库提供的解决方案更加特殊。
我知道以下事项:
Virtual DOM
以及React如何运行差异以获取最少的步骤以确定“更改”并相应地响应/重新呈现,而不是传统的“脏检查”操作在其他框架/库中。所以,上面的陈述在概念上对我来说听起来都很好,但是,当我考虑现实生活用例和实践时,我没有想到好处:
考虑使用jQuery
:
$("#box").removeClass('red').addClass('blue');
与React方式做同样的事情,它是如何“慢”的?我理解它的方式,jQuery将直接从DOM中获取1个匹配id值为“box”的元素,并按照指示删除并添加类 - 所有特定于DOM中的元素。 (它是否在此处实现“脏检查”以查找#box?)
使用ReactJS,它将首先在其Virtual DOM中进行相同的更改(在执行diff以查找具有最少步骤数的#box之后)并将元素重新呈现为实际DOM。因此,如果有的话,它似乎是在增加一个与VDOM进行比较的额外步骤。
“嘿,这里发生了一些变化(触发了事件)......所以让我们看看我们应该做些什么(运行与事件绑定的所有事情)并做到这一点”
非常感谢任何见解,指示和示例!
答案 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的嗡嗡声都带有高度偏见。现在得到我的证明。
祝大家开心!