

React、Vue 关于虚拟 DOM 的文章经常有这样的表述:因为直接操作真实 DOM 耗性能。妥...
source link: https://www.v2ex.com/t/848093
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

学习 React 过程中,发现很多文章说到: 为什么要用 VDOM ,而不是直接操作真实 DOM ?都有类似这样的表述:直接操作真实 DOM 耗性能,细小的改动都可能导致重绘或重排。
但是如下这样直接操作 DOM ,不比用 VDOM 然后 Diff 后更新 DOM 性能更好吗?
document.getElementById("divId").innerHTML = "update text";
使用 VDOM 的目的更多的是便于管理更新,而不是性能上的考虑?
ShadowPower 6 小时 52 分钟前 1
许多页面的生成过程,并不能像这个例子一样一步到位
makelove 6 小时 50 分钟前
即不想要手动精细操作,又不想低效全量更新 DOM,那只有 VDOM 或类 solidjs 这种,很明显性能比原始全量更新性能高。
summer1874 6 小时 44 分钟前
声明式的更新性能消耗( vue ,react )= 找出差异的性能消耗 ( diff ,vdom )+ 直接修改的性能消耗( document.createElement 等)。只是目前结合心智负担,可维护性等因素综合考虑,虚拟 dom 还是不错的选择。
statumer 6 小时 40 分钟前 via iPhone
页面上有成百上千个元素的时候,你手算最优状态转移是不可能的。所以你直接操作 DOM 完成的不是最优状态转移,但是 vDOM 算出来的是最优状态转移,而 js 计算的开销比 DOM 操作小很多,这时候 vDOM 就有性能优势。
statumer 6 小时 32 分钟前
ryncv 6 小时 26 分钟前 1
另外还有就是工程化的因素在里面,更多的是更加便捷的开发效率,不会有人为了追求性能去手动去更新 dom 吧?
otakustay 6 小时 20 分钟前 1
egoyau 6 小时 7 分钟前 1
1 、dom 更新频率低:比如静态页面、广告页面,没有数据更新,一次性渲染。操作真实 DOM 性能优于 VDOM 。
2 、dom 更新频率高:有较强的交互性,数据更新频率高。操作真实 DOM 性能劣于 VDOM 。
cyrbuzz 5 小时 35 分钟前
sweetcola 5 小时 23 分钟前
React 更新 DOM 其实也是你这种方法来更新,不然还能怎样用 JS 去更新 DOM 。
举个例子,面对 100 层深度的 DOM ,第 50 层和 99 层要同时被更新,你会怎样做。`document.getElementById("root").innerHTML = '<div>.........</div>'`吗? React 的话会直接找到需要更新的节点并进行替换。
mxT52CRuqR6o5 4 小时 49 分钟前 via Android
yaphets666 4 小时 35 分钟前 via iPhone
lscho 4 小时 33 分钟前
举例对比应该举 DIFF 的过程,而不是最后更新 DOM 的操作吧?就算事 VDOM ,最后也是这样更新 DOM 的。
dudubaba 4 小时 24 分钟前
qzsi001 4 小时 22 分钟前
我记得 react vue 刚出来的时候宣传的点都会说到这个问题。
其中尤其是 vue 刚出来的时候双向绑定带来的便捷感,把传统的 jq 开发模式碾压的死死的。
打通 dom 和 数据 的同步之后的前端,才真正的有可能大规模的往工程化方向上去靠。
至于 dom 修改的性能提升 balabala ,其实私以为只是一个便利顺带的好处罢了
codehz 4 小时 17 分钟前
而为啥要跑很多次 render 函数这就纯粹是抽象起来方便的因素了——简单说就是代码容易编写,因为每次运行 render 都是创建新的 vdom 树,类似于即时模式渲染的 gui
可以做到跟踪 dom 元素的话,那当然是这样快,但是这不方便抽象——Svelte 就需要造编译器以支持抽象
不方便抽象的后果要么是直接放弃,然后为了精细操作,代码就变得冗长且不易维护
或者就是强行抽象然后每次都重建整个 dom 树(比如直接重建整个列表的所有元素)——这种情况下,那当然就慢于 react 的 vdom 方案了
提示:
改 innerHTML 问题很大(即使只改文本),除非只在创建时用,不然看着 fps 爆炸吧)
要改就改 nodeValue (注意选择到文本节点而不是元素节点)
KouShuiYu 2 小时 18 分钟前
这时候就体现出虚拟 dom 的好处的,它可以在 js 的内存中直接判断过滤掉不需要更新的,这时候就变成了
document.getElementById("app").innerHTML = "。。。。几个元素。。。。。"
document.getElementById("app").innerHTML = "。。。。几个元素。。。。。"
aguesuka 2 小时 9 分钟前
在你的例子里, 假如我有个表格, 数据在 table 的 status 里, 如果没有 vdom, 那么每次数据变化都要重新渲染表格, 但是 vdom 只需要找到被改过的 cell 就行了
retrocode 2 小时 4 分钟前
DOLLOR 1 小时 38 分钟前
这时候你还得一个一个全部重新绑定、设置状态、设置属性。
huijiewei 1 小时 29 分钟前
Recommend
-
63
目录:量子场论(6) 量子场论(7) 第一部分小结 量子场论(8)本次内容:给出与Wightman axioms与Locality axioms等价的Path integral axioms,简单讨论格点上场论的基本概念。(基本概念就不再重复了,这里默认…
-
51
-
56
编者按:成功的人之所以成功,绝不是因为与他人一样。他们明白,要想成功就必须付出更多,更好的强健自己的体魄,更强的武装自己的头脑。本文对二十多位企业高管级人物进行采访,以下是他们分享的帮助他们实现成功的一些日常习惯。...
-
10
韩国教授抗议“韩国泡菜源于中国”表述,百度百科回应 2020年12月09日 09:58 4404 次阅读 稿源:
-
6
专注工业互联网领域的表述是否客观?容知日新回复科创板意见落实函 上交所要求容知日新说明:其通过大数据平台和专家诊断系统为客户提供在线检测与故障诊断服务,发行人专注工业互联网领域的表述是否客观,并根据...
-
10
编写PRD时,如何将每个功能点尽量表述清楚,避免不必要沟通? 研发人员看不懂需求文档的需求描述,容易漏掉细节及逻辑,需求表述不够准确清晰,导致UI、研发、测试每个人理解不同,总会遇到这种情况,怎...
-
4
聯儲局放棄通脹暫時表述【匯君】 聯儲局的地區經濟報告指出,美國多個地區也受到供應鏈瓶頸問題影響,及勞工不足問題也很嚴重。現在美國的就業難題,不是因為職位不足,而是人們不肯工作或是工資不夠高,所以出現加薪的情況,而加薪會影響通脹的。...
-
8
170 个回复 ...
-
6
抖音辟谣直播中不能提微信:网友表述存在大量不实信息 ...
-
10
V2EX › 程序员 平时评价/表述一个事物时大家会出现模棱两可的情况吗
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK