• 技术文章 >web前端 >前端问答

    vue为什么是异步渲染

    青灯夜游青灯夜游2022-12-21 11:59:09原创76

    原因:可以提升性能。如果不采用异步更新,那么每次更新数据都会对当前组件进行重新渲染;所以为了性能考虑,Vue会在本轮数据更新后,再去异步更新视图,而不是每当有数据更新,就立即更新视图。

    本教程操作环境:windows7系统、vue3版,DELL G3电脑。

    1、nextTick()的原理及作用

    nextTick确保我们所操作的DOM是更新之后的。

    (1)应用场景在视图更新之后,基于新的视图进行操作。

    (2)原理:

    nextTick 是典型的将底层JS执行原理应用到具体案例中的示例,引入异步更新队列机制的原因∶

    如果不采用异步更新,那么每次更新数据都会对当前组件进行重新渲染。所以为了性能考虑,Vue 会在本轮数据更新后,再去异步更新视图。而不是每当有数据更新,就立即更新视图。

    当你设置 vm.someData = 'new value',DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新才会进行必要的DOM更新。

    (3) vue的降级策略

    Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver setImmediate,如果执行环境不支持,则会采用 setTimeout(fn, 0) 代替,进行降级处理。降级处理的目的都是将flushCallbacks函数放入微任务或者宏任务队列,等待下一次事件循环时来执行

    实际刷新队列是有可能在本次事件循环的微任务中刷新的,也可能是在下一个事件循环中刷新的。这取决于代码当前执行的环境,如若当前执行环境支持promise,那么nextTick内部实际会用Promise去执行,那么队列刷新就会在本次事件循环的微任务中去执行。

    优先选择微任务的原因:微任务中更新队列是会比在宏任务中更新少一次UI渲染的

    2、为何Vue采用异步渲染

    vue是组件级更新组件内有数据变化时,该组件就会更新。例:this.a = 1、this.b=2(同一个watcher)

    (1)原因:如果不采用异步更新,那么每次更新数据都会对当前组件进行重新渲染。所以为了性能考虑,Vue 会在本轮数据更新后,再去异步更新视图。而不是每当有数据更新,就立即更新视图。

    (2)过程:

    3)源码解析:

    1.png

    【相关推荐:vuejs视频教程web前端开发

    以上就是vue为什么是异步渲染的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Vue 异步渲染
    上一篇:vue全局组件和局部组件的区别是什么 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • vue webpack可打包哪些文件• vue渲染函数使用哪个命令• vue dom是什么意思啊• 深入探讨Vue3的响应式机制• vue的空格报错怎么办
    1/1

    PHP中文网