Vue实行流程及渲染分析(二)

计算机软件开发 2024-9-29 09:07:45 89 0 来自 中国
紧接上回分解,咱继续分析vue是如何举行渲染的!

创建DOM节点



  有了vnode后,vue还必要根据vnode来创建DOM节点。如果是初次渲染,那么vue会走创建的逻辑。如果是数据的更新导致的重新渲染,那么vue会走更新的逻辑。
初次渲染

  由于是初次渲染,以是不存在先前老的vnode,因此无需举行比力。vue直接调用 createElm 方法创建DOM元素。具体的创建步调如下:
  1.起首为vnode创建DOM元素。
  2.如果vnode有子节点,逐个为其子节点创建DOM元素,并将子DOM元素插入到vnode的DOM元素上。
  3.调用setAttribute 为vnode的DOM元素添加属性。
  4.将vnode的DOM元素插入到其父元素上。
重新渲染

  如果不是初次渲染,而是由数据变革所触发的重新渲染,那么vue会最大限度地复用已创建的DOM元素。而复用的条件就是通过比力新老vnode,找出必要更新的内容,然后最小限度地举行更换。这也是vue设计vnode的核心用途。
vue源码中可以看到(此处先忽略),当新老vnode完全相称的情况下,vue不会对该节点重新渲染,直接跳过了。
  如果新vnode发生了变革,那么vue会遵循以下步调更新DOM元素:
  1.更新DOM元素的属性。
  这个在初次渲染那部分提到了一些。vue内实现了多少个属性处理处罚模块,专门用于DOM元素属性的创建和更新。这些模块中根本都实现了create、update这两个处理处罚函数。create 负责DOM元素属性的创建,update 负责DOM元素属性的更新。cbs.update(oldVnode, vnode) 的意思就是逐个调用这些模块上的 update 方法,以更新发生改变的DOM元素属性。
  2.更新DOM元素的子元素。关于DOM子元素的更新分为几种情况

  • 如果新老vnode的子节点都是文本节点且文本内容差异,处理处罚方式更新DOM元素的textContent属性值。
  • 如果新老vnode的子节点都好坏文本节点,必要调用 updateChildren 递归地去更新子节点。
  • 如果新vnode的子节点好坏文本节点,而老vnode的子节点是文本节点,必要扫除DOM元素的文本,并创建子vnode的DOM元素插入到其父节点的DOM元素上。
  • 如果新vnode的子节点不存在,但老vnode的子节点存在,那么调用 removeVnode 删除老vnode的子节点对应的DOM元素。
  • 如果老vnode的子节点是文本节点,而新vnode的子节点不存在,则清空老DOM元素的文本。
  大量的DOM使用会极斲丧欣赏器性能。vue在每次数据发生变革后,都会重新天生vnode节点。通过比力新老vnode节点,找出必要进利用用的最小DOM元素子集。根据变革点,举行DOM元素属性、DOM子节点的更新。这种设计方式大大淘汰了DOM使用的次数。
  这次文章大部分都是看一些博客文章所相识的内容,根本上可以相识vue如何创建和如何渲染界面,照旧老话好记性不如烂笔头 自己做了一些总结 可以加深明白!
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-21 21:33, Processed in 0.156607 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表