《React+Redux前端开发实战》—1.3.2 虚拟DOM

举报
华章计算机 发表于 2019/07/24 23:11:01 2019/07/24
【摘要】 本节书摘来自华章计算机《React+Redux前端开发实战》一书中的第1章,第1.3.2节,作者是徐顺发.

1.3.2  虚拟DOM

  先来了解一下什么是DOM,什么又是虚拟DOM。

  Document Object Model(DOM,文档对象模型)是W3C(World Wide Web Consortium,万维网联盟)的标准,定义了访问HTML和XML文档的标准方法:W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。简单来说,就是用于连接document和JavaScript的桥梁。

  每个页面都有一个DOM树,用于对页面的表达。真实场景中用户的很多操作会导致浏览器的重排(引起DOM树重新计算的行为)。一般的写法都是手动操作DOM,获取页面真实的DOM节点,然后修改数据。在复杂场景或需要频繁操作DOM的应用中,这样的写法非常消耗性能。当然也有许多方式可以避免页面重排,比如把某部分节点position设置为absolute/fixed定位,让其脱离文档流;或者在内存中处理DOM节点,完成之后推进文档等。这些方法维护成本昂贵,代码难以维护。

  React为了摆脱操作真实DOM的噩梦,开创性地把DOM树转换为JavaScript对象树,这就是虚拟DOM(Virtual DOM)。

  简单理解,虚拟DOM就是利用JS去构建真实DOM树,用于在浏览器中展示。每当有数据更新时,将重新计算整个虚拟DOM树,并和旧DOM树进行一次对比。对发生变化的部分进行最小程度的更新,从而避免了大范围的页面重排导致的性能问题。虚拟DOM树是内存中的数据,所以本身操作性能高很多。

  可以说,React赢就赢在了利用虚拟DOM超高性能地渲染页面,另辟蹊径地处理了这个对于开发者来说真实存在的痛点。除此之外,由于操作的对象是虚拟DOM,与真实浏览器无关,与是否是浏览器环境都没有关系。只需要存在能将虚拟DOM转换为真实DOM的转换器,就能将其转为真实DOM在界面中展现,从而就达到了利用React实现跨平台的目的,比如React Native的实现。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。