虚拟 DOM 的优缺点?

news/2024/7/10 0:23:41 标签: vue, javascript

什么是虚拟dom
用js模拟一颗dom树,放在浏览器内存中.当你要变更时,虚拟dom使用diff算法进行新旧虚拟dom的比较,将变更放到变更队列中,

反应到实际的dom树,减少了dom操作.

虚拟DOM将DOM树转换成一个JS对象树,diff算法逐层比较,删除,添加操作,但是,如果有多个相同的元素,可能会浪费性能,所以,react和vue-for引入key值进行区分.

优点:

  • 保证性能下限: 框架的虚拟 DOM 需要适配任何上层 API 可能产生的操作,它的一些 DOM 操作的实现必须是普适的,所以它的性能并不是最优的;但是比起粗暴的 DOM 操作性能要好很多,因此框架的虚拟 DOM 至少可以保证在你不需要手动优化的情况下,依然可以提供还不错的性能,即保证性能的下限;
  • 无需手动操作 DOM: 我们不再需要手动去操作 DOM,只需要写好 View-Model 的代码逻辑,框架会根据虚拟 DOM 和 数据双向绑定,帮我们以可预期的方式更新视图,极大提高我们的开发效率;
  • 跨平台: 虚拟 DOM 本质上是 JavaScript 对象,而 DOM 与平台强相关,相比之下虚拟 DOM 可以进行更方便地跨平台操作,例如服务器渲染、weex 开发等等。

缺点:

  • 无法进行极致优化: 虽然虚拟 DOM + 合理的优化,足以应对绝大部分应用的性能需求,但在一些性能要求极高的应用中虚拟 DOM 无法进行针对性的极致优化。
    首次渲染大量DOM时,由于多了一层虚拟DOM的计算,会比innerHTML插入慢。

来自:https://www.cnblogs.com/Rivend/p/12630543.html


http://www.niftyadmin.cn/n/1681317.html

相关文章

Java中 final和static解析

一、final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子…

我的SICP习题解答-chapter 1

我使用的scheme解释器主要是petite chez scheme。解题过程中参考了&#xff1a;http://sicp.readthedocs.org/en/latest/index.html 1.1和1.2基本没问题&#xff0c;除非你没看书...... 1.3 (define (< x y)(or (< x y) ( x y))) (define (add_large_two a b c)(cond ((a…

this的理解

有以下几种状况 this的指向在函数定义的时候是确定不了的&#xff0c;只有函数执行的时候才能确定this到底指向谁&#xff0c;实际上this的最终指向的是那个调用它的对象 function a(){var user "伏地魔";console.log(this.user); //undefinedconsole.log(this); …

javascript是单线程的理解

一、javascript为什么是单线程的 JavaScript的单线程&#xff0c;与它的用途有关。作为浏览器脚本语言&#xff0c;JavaScript的主要用途是与用户互动&#xff0c;以及操作DOM。这决定了它只能是单线程&#xff0c;否则会带来很复杂的同步问题。比如两个线程同时操作一个dom。…

JavaScript数据类型(转)

JavaScript中有5种简单数据类型&#xff08;也称为基本数据类型&#xff09;&#xff1a;Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object&#xff0c;Object本质上是由一组无序的名值对组成的。 typeof操作符 介于JavaScript是松散类型的&#xff0…

springcloud断路器Dashboard监控仪表盘的使用

断路器Dashboard监控仪表盘的使用 在原有的orderserverfeignhystrix服务中使用 1、增加依赖仓库 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </d…

web常见http状态码

状态码的类别 http状态码的由三位数字和原因短语组成&#xff0c;数字的第一位数字表示响应的类别&#xff0c;后面两位无类别。以下有五种类别。另外只要遵循状态码类别的定义&#xff0c;即使改变RFC2616中定义的状态码&#xff0c;或者服务端自行创建状态码都可以。 1XX 类…