首页 > 编程语言 >前端面试总结16-vnode

前端面试总结16-vnode

时间:2022-10-12 20:57:38浏览次数:64  
标签:hash 函数 render 16 dom vnode 面试 模板

1.vue组件渲染更新过程

 

 

1)初次渲染过程

解析模板为render函数

触发响应式,监听data属性getter与setter

执行render函数,生成vnode,patch(elem,vnode)

2)更新过程

修改data触发setter函数(初次渲染中已经监听)

重新执行render函数,生成newVnode

patch(vnode,newVnode)

3)异步渲染

$nextTick函数:

汇总data修改,一次性更新视图

减少DOM操作次数,提高性能

2.响应式

1)核心API-Object.defineProperty

2)缺点:

有对象存在,故需要深度监听,需要递归到底,一次新计算量大

无法监听新增属性/删除属性

无法原生监听数组,需要特殊处理

3.虚拟dom

DOM操作非常消耗性能,为了优化dom操作提高性能而产生的概念

用JS模拟dom结构,计算出最小变更,操作dom

 

 

 举例用于snabbdom中的api

h,作用:创建标签节点

vnode,作用:通过h创建中,children参数多层嵌套h模拟虚拟dom产生

patch,作用:通过传入新旧vnode进行对比并操作后实现dom更新,使用diff算法:

把节点以树的形式,进行遍历对比时间复杂度为O(n³)

优化:时间复杂度为O(n)

只比较同一层级,不跨级比较

tag不相同,则直接删除重建,不再进行深度比较

tag和key,两者都相同认为是同一节点,不再进行深度比较

4.模板编译

1)with语法

使用with能改变{}内自由变量的查找方式,当作obj的属性来查找

 

2)把模板转换为某种js代码,即编译模板

 

 

 

 3)vue组件中是应用render代替template,将模板函数编译为render函数,执行render函数返回vnode

并且执行render函数会触发getter

 

 基于vnode再执行patch与diff

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

 

5.hash与H5 history

1)hash变化

hash变化会触发网页跳转,即浏览器的前进后退

hash变化不会刷新网页,SPA必须的特点

hash永远不会提交到server端

API:window.onhashchange = (event)=>{}

2)H5 history

用url规范的路由,但跳转时不刷新页面

history,pushState

window.onpopstate

需要后端支持

 

标签:hash,函数,render,16,dom,vnode,面试,模板
From: https://www.cnblogs.com/qwqxyd/p/16785897.html

相关文章