1.什么是虚拟DOM
答:
所谓的虚拟DOM就是利用js描述元素与元素之间的关系 利用js对象表示真实的DOM 创建一个虚拟的DOM对象
由于在浏览器中DOM是很昂贵的 频繁的操作DOM会产生一定的性能额问题
在组建渲染的时候会调用render函数 这个函数会生成一个虚拟DOM 再根据这个虚拟DOM生成一个真是DOM
然后这个真是DOM会挂载到我们页面中 如果组件内有响应式的数据发生改变的时候render函数会生成一个新的
虚拟DOM 然后这个新的会和旧的进行对比 找到要修改的部分 进行修改
2.diff算法
答:
diff算法就是对虚拟DOM进行对比 返回一盒patch对象 这个对象的作用就是存储节点不同的地方
diff算法步骤:
1.用js对象表示真实的DOM结构 生成一个虚拟的DOM 再用虚拟的DOM构建一个真实的DOM树 放在页面中
2.状态改变的时候生成新的虚拟的DOM和旧的进行对比 对比过程就是diff算法 通过patch对象记录差异
3.把记录的差异构建到真实的DOM上 视图就更新了
vue的diff算法是平级比较 不考虑跨级比价 内部采用深度递归的方式 + 双指针方式 进行比较
3.组件写name的好处
答:
增加name属性可以实现组件递归用自身 调用的时候就是name名字 方便调试和查找对应的组件
比如果用keep-alive时 中的include个exclude 就是用name属性区分谁缓存 谁不缓存的
4.vue.use是干什么的
答:
vue.use是用来安装vue.js插件 这个插件可以是一个组件也可以是一个函数
插件里面有一个install方法 install调用时 第一个参数就是Vue
在调用vue.use方法时就会执行vue.install方法
5.mixin混入
答:
混入就是一种非常灵活的方式 在哪个组件混入就会合并哪个组件的方法
如果发生冲突时组件的优先级会更高
全局混入时要格外小心 一点全局混入 所有的实例就都会触发
6.vue.extend
答:
使用基础vue构造器 创建一个子类 参数是一个包含组件的选项对象
可以理解为创建子组件的时候可以用 mount 或者el 指定到这个子组件挂载到哪里