vue编译为render函数:模板编译过程

模板编译过程:模板编译为render函数,返回vnode。再执行diff和patch。

使用webpack,vue-loader,会在开发环境下编译模板。

虚拟dom和diff算法

1,将dom抽象为虚拟dom,diff算法对比新旧虚拟dom,只把变化的部分重新渲染。

2,diff算法是通过js层面的计算,返回一个patch补丁对象,之后解析这个patch对象,渲染到页面上。

因为传统的dom渲染慢,消耗性能。js在浏览器上运行快。

表示虚拟dom的js对象上有三个属性:tag(元素标签名),props(元素属性),children(元素下级-数组)

{ "tag":"div",props:{"color:":"red","id","id11"},children:[{}] }

diff算法规则

diff即比较。同层树节点进行比较。

1,只比较同意层级,不深度比较。

2,如tag不相同,则删掉重建。

3,如tag和key相同,则认为是相同节点,不在深度比较。

组件渲染/更新过程

1,初次渲染组件

1,解析模板为render函数。

      2,触发响应式,监听data属性(第一次只触发getter)

3,执行render函数,生成vnode,并执行patch。

2,更新组件

1,修改data触发setter。

2,重新执行render函数,生成newVnode,

3,执行patch(vnode,newVnode),diff算法更新视图。

3,异步渲染组件

$nextTick()是异步渲染组件,汇总data的修改,一次性更新视图。好处:减少dom操作次数,提高性能。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值