美文网首页
虚拟dom与直接操作dom

虚拟dom与直接操作dom

作者: redpeanuts | 来源:发表于2020-05-11 19:21 被阅读0次

虚拟dom

document.createDocumentFragment()创建虚拟dom,然后再将虚拟dom替换掉原dom

直接操作dom

直接利用innerHTML或者style改变dom结构,频繁操作则会影响性能.

逐帧操作dom

使用window.requestAnimationFrame(),浏览器在下一次重绘之前调用你传入给该方法的函数。回调函数执行次数通常是每秒60次,但在大多数遵循W3C建议的浏览器中,回调函数执行次数通常与浏览器屏幕刷新次数相匹配。
window.requestAnimationFrame()执行后会返回一个id,如果要清除该事件则使用cancelAnimationFrame(id)
利用raf实现动画,walking dog

dog.gif
    <div ref="dog"
         class="dog">&#128021;</div>
//raf实现
    let start = 0
    const w = window.innerWidth
    let tr = true
    let _this = this
    const raf = function () {
      if (start > w && tr) {
        tr = false
      }
      if (start < 0 && !tr) {
        tr = true
      }
      if (tr) {
        _this.$refs.dog.style.transform = 'rotateY(180deg)'
        start += 1
      }
      else {
        _this.$refs.dog.style.transform = 'rotateY(360deg)'
        start -= 1
      }
      _this.$refs.dog.style.left = start + 'px'
    }

    let fun = function () {
      raf()
      window.requestAnimationFrame(fun)
    }
    fun()
//animation实现
.dog {
  position: fixed;
  top: 0;
  left: 0;
  transform: rotateY(180deg);
  animation: run 20s linear infinite;//js实现时注释掉改行
}

@keyframes run {
  0% {
    left: 0;
  }
  49% {
    transform: rotateY(180deg);//防止0-50中间旋转
  }
  50% {
    left: 100%;
    transform: rotateY(0);
  }
  99% {
    transform: rotateY(0);//防止50-100中间旋转
  }
  100% {
    left: 0;
  }
}

因为js是逐帧改变,整个过程貌似更加流畅

性能比较

虚拟dom>raf>>直接操作
操作1000个节点,依次用时10s、70s、1200s
documentFragment VS requestAnimationFrame VS Direct DOM Access

performance.gif

相关文章

  • 虚拟dom与直接操作dom

    虚拟dom document.createDocumentFragment()创建虚拟dom,然后再将虚拟dom替...

  • vue 2x源码分析(三)---虚拟dom

    以前用jq,我们都是直接操作dom,为什么要使用虚拟dom,虚拟dom的优势是什么,虚拟dom是如何实现的,vue...

  • Vue笔记1

    问:为什么要用虚拟DOM? 答:虚拟DOM其实就是对象,操作对象的成本比操作DOM的成本更低,所以要用虚拟DOM ...

  • 如何使用React中的Component、PureCompone

    一、前言 React虚拟DOM再快,也比不上直接操作DOM。并且直接使用React.Component还时常会出现...

  • 实现一个简易的虚拟DOM

    虚拟DOM 虚拟DOM用原生的JavaScript模拟实现了DOM结构,.我们通过操作这个虚拟DOM树来实现对页面...

  • react

    1.react特点 虚拟DOM,react非常快速因为它从不直接操作DOM。render()方法实际上是对DOM描...

  • Vue

    虚拟DOM 为啥要用?DOM操作开销大,虚拟DOM提供一种方便的工具,保证开发效率,保证最小化DOM操作用Js对象...

  • Vue解决了哪些问题

    虚拟 dom:dom 操作时非常耗性能的,不再使用原生的 dom 操作节点,极大的解放 dom 操作,但具体操作的...

  • Vue之虚拟DOM

    Vue之虚拟DOM 为什么要用到虚拟DOM? 众所周知,DOM操作是JavaScript语言的硬伤。浏览器对DOM...

  • 虚拟DOM详解

    vdom是什么?为何使用vdom? virtual dom,虚拟DOM 用JS模拟DOM结构 DOM操作非常昂贵 ...

网友评论

      本文标题:虚拟dom与直接操作dom

      本文链接:https://www.haomeiwen.com/subject/iaxpnhtx.html