当前位置: 首页 > 知识库问答 >
问题:

React的虚拟DOM比DOM快多少?

冯庆
2023-03-14

我知道React创建一个虚拟DOM并比较差异,然后只是更新真实DOM的实际元素,但是如果手动更改它,如何更有效呢?通过getElementByID还是使用jQuery函数

<!DOCTYPE html>
<html>
<body>

<form>
Select your favorite browser:
<select id="myList" onchange="myFunction()">
  <option></option>
  <option>Google Chrome</option>
  <option>Firefox</option>  
  <option>Internet Explorer</option>
  <option>Safari</option>
  <option>Opera</option>
</select>
<p>Your favorite browser is: <input type="text" id="demo" size="20"></p>
</form>

<script>
function myFunction() {
    var mylist = document.getElementById("myList");
    document.getElementById("demo").value = mylist.options[mylist.selectedIndex].text;
}
</script>

</body>
</html>

共有1个答案

逄兴昌
2023-03-14

更改虚拟DOM应该与更改真实DOM没有太大区别。问题就在后面:真实DOM中的变化触发了中继输出和重新绘制,所以我们接触真实的东西越少越好。

模板渲染的一种方法是渲染模板,然后用新渲染的模板替换整个容器元素。这需要重新计算容器中刚刚出现的所有内容,以及受其影响的所有内容。基本上,如果浏览器是你的厨房,你的模板容器是一个冰箱(五分钟后冰箱的图像,你的虚拟DOM),你买了一个柠檬,典型的模板渲染会扔掉你的冰箱,想象一个柠檬的冰箱会是什么样子,买你以前所有的食材和一个柠檬,然后装满新的冰箱。

React和其他类似框架所做的加快这一速度的事情是diff过程,该过程查找最小的更改集,以使真实DOM反映虚拟DOM,这可以大幅减少浏览器为绘制虚拟DOM而需要进行的重新计算的次数。在前面的类比中,你想象你买了一个柠檬后你的冰箱会是什么样子(不加柠檬的冰箱和加柠檬的冰箱),找出最小的变化(加柠檬)并执行。

碰巧的是,每次你在冰箱里换任何东西都要扔出去,这有点贵。

请注意,虚拟DOM并不比简单地通过getElementByID获取一个元素并更改它更快。比较的是处理复杂子树中变化的两种方法,而不是单个元素。

 类似资料:
  • 我知道如果在vanilla js中更改DOM,整个浏览器每次都会进行中继输出和重新绘制。 这是vanillajs测试代码 这是react测试代码 基准结果站点js-framework-benchmark result 和githubsite js-framework-benchmark github

  • 本文向大家介绍react的虚拟DOM和vue的虚拟DOM有什么区别?相关面试题,主要包含被问及react的虚拟DOM和vue的虚拟DOM有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 React 是数据先生成 vdom,然后对比 vdom(实现上并非先后顺序,两棵树边遍历边生成新的树),最后通过新的 DOM 树渲染。 Vue 是数据先进性对比,先通过数据的不同,再去更新 vdom(这不知道

  • 我知道React的虚拟DOM更快有两个理由- > 它只更新那些实际需要更新的元素(使用diff)。 它批量更新,因此我们只更新一次真正的DOM。因此,重新喷漆也只能进行一次,否则会进行多次。 我对这两点都有疑问- > 据我所知,所有现代浏览器的效率都足以只更新DOM中所需的元素。例如,如果我有两个“p”标记,并且我使用按钮单击更改其中一个p标记中的文本,那么safari将只更新该p标记(我已使用油

  • 前言 vdom 是 vue 和 React 的核心,先讲哪个都绕不开它。 vdom 比较独立,使用也比较简单。 如果面试问到 vue 和 React 和实现,免不了问 vdom: vdom 是什么?为何会存在 vdom? vdom 的如何应用,核心 API 是什么 介绍一下 diff 算法 什么是 vdom 什么是 vdom DOM操作是昂贵的。 步骤一:用JS对象模拟DOM树 步骤二:比较两棵虚

  • 在我的项目中实现shadowdom会让它们像React使用的虚拟DOM一样更快吗?

  • 基础 虚拟 DOM 节点(vnode)是用于表示 DOM 元素(或 DOM 的一部分)的 JavaScript 对象。Mithril 的虚拟 DOM 引擎使用 vnode 树来生成 DOM 树。 vnode 通过 m() hyperscript 工具来创建: m("div", {id: "test"}, "hello") Hyperscript 也可以直接使用组件: // 定义一个组件 var E