浅析Virtual DOM

说在前头:

上文提到了浏览器的重绘和重排,并提到了一些优化的方式。框架的魅力就在于不知不觉的就帮你把事情做掉了,在编写react代码的时候我从没有考虑过添加节点的时候将元素移出文档流等操作。毕业之后就接触了react,但是被问到他的特点是什么还是有点不知所措,今天和大家一起了解一下他的特点,虚拟DOM。

正文:

说之前先看一个例子:

<ul id = 'list'>
  <li class="list_li">li-1</li>
  <li class="list_li">li-1</li>
</ul>

这段HTML代码在前端中展示出来是一个列表,能不能有一种数据结构,通过数据的方式将它表达出来呢?

{
  tag: 'ul',
  attrs: {
    id: 'list'
  },
  children: [
    {
      tag: 'li',
      attrs: {
        className: 'list_li',
      },
      children: ['li-1']
    },{
      tag: 'li',
      attrs: {
        className: 'list_li',
      },
      children: ['li-2']
    }
  ]
}

上面的属性基本上可以理解,说一下children,还记得react中this.props.children的用法吗?是的,他代表的就是当前标签里面的内容。

理解了上面的内容,react中的虚拟dom和上面做的事情差不多,他会将当前页面的结构通过这种方式将HTML的DOM节点抽象描述,这个是不需要DOM API的,所以不会有任何的性能问题,这个JavaScript对象就称为***虚拟DOM*** 。当需要重新渲染组件的时候,React自己有一个Diff算法,算到哪些节点发生了变化,然后再映射到实际需要修改的DOM节点上面,这样只会引发一次重排和DOM访问,是很高效的一种实现方式。

再看虚拟DOM

作为框架的特色,他的优势肯定不在于单次操作,而是当项目逻辑复杂,需要经常更新界面的情况下,能够实现的更高效、合理。本质的话,他就是一个JavaScript对象。工作原理如下:

  • 生成虚拟DOM树
  • 对比新生成的和初始的虚拟DOM树的差异
  • 根据对比结果更新视图
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThreadLocal 是 Java 中的一个类,它提供了一种线程局部变量的机制。线程局部变量是指每个线程都有自己的变量副本,每个线程对该变量的访问都是独立的,互不影响。 ThreadLocal 主要用于解决多线程并发访问共享变量时的线程安全问题。在多线程环境下,如果多个线程共同访问同一个变量,可能会出现竞争条件,导致数据不一致或者出现线程安全问题。通过使用 ThreadLocal,可以为每个线程提供独立的副本,从而避免了线程安全问题。 ThreadLocal 的工作原理是,每个 Thread 对象内部都维护了一个 ThreadLocalMap 对象,ThreadLocalMap 是一个 key-value 结构,其中 key 是 ThreadLocal 对象,value 是该线程对应的变量副本。当访问 ThreadLocal 的 get() 方法时,会根据当前线程获取到对应的 ThreadLocalMap 对象,并从中查找到与 ThreadLocal 对象对应的值。如果当前线程尚未设置该 ThreadLocal 对象的值,则会通过 initialValue() 方法初始化一个值,并将其存入 ThreadLocalMap 中。当访问 ThreadLocal 的 set() 方法时,会将指定的值存入当前线程对应的 ThreadLocalMap 中。 需要注意的是,ThreadLocal 并不能解决共享资源的并发访问问题,它只是提供了一种线程内部的隔离机制。在使用 ThreadLocal 时,需要注意合理地使用,避免出现内存泄漏或者数据不一致的情况。另外,由于 ThreadLocal 使用了线程的 ThreadLocalMap,因此在使用完 ThreadLocal 后,需要手动调用 remove() 方法清理对应的变量副本,以防止内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值