vue路由实现原理
一种方法是通过哈希路由也即是带#号,通过这种方法改变url是不会触发浏览器的数据请求,但是会触发hashchange事件,匹配对应的路有从而渲染组件。就是不能用来做锚了。history,也是不会触发,但是如果刷新页面需要后台设置一下,不然就404了。对vue来说,都是通过不刷新实现单页面效果
路由守卫以及使用场景
beforeEach跳转前,beforerouteupdate更新路由,aftereach跳转后。to:去哪里,from:来自哪里,next:是否跳转
Vue nextTick 的用法和底层实现原理
获取更新后的dom。vue是异步更新代码的,如果监听到数据变化,就会在dom渲染结束后执行延迟回调,获取更新后的dom,一般是promise,不行就settimeout
父子组建生命周期
先到父组建的beforemount然后执行到子组建的mounted,再进行父组建的mounted。子组建挂载完毕父组建才能挂载完毕。
vue组建通讯方式
常用的就是(props,emit),vuex,children/$parent) mixin slot插槽
vueCSS scoped 的原理
使组建不要相互污染,主要是使用postcss给class增加一个独一无二的属性名哈希值,。
虚拟dom和key
创建虚拟节点进行对比,最小程度改变dom渲染,但是毕竟多了一层虚拟dom,无法极致渲染,而且因为抽象了渲染过程具有跨平台能力。使用diff算法对比dom树的差异,使用path算法,应用到真正的dom树上面。使用key的唯一值,进行对比,但是key一定要唯一值并且不能使用index因为增删会导致index变化,全部渲染导致。
vuediff算法
diff算法是平级比较,不考虑跨级比较的情况。内部采用深度递归的方式+双指针方式比较
vuex的用法和区别
action处理异步,mutations修改值,state储存数据,getters处理格式
vue性能优化
if和for不能连用,因为for优先比if高,会导致循环一遍判断一次。dom操作多使用v-show,for循环的时候带上key,路由懒加载,模块按需加载
vue2事件修饰符,3取消了native怎么办
stop,capture,once,enter,tab,left,right.
vue2和3的区别
3主要是用proxy进行数据劫持,好处就是可以直接监听数组和对象的变化,不需要和2一样set与拦截数组的变化方式。但是兼容性没有defineproperty好。vue3移除了过滤器,native v-for优先级比v-if低了
watch和computed的区别
watch主要监听属性变化,多个数据影响一个数据,不读区缓存,而computed主要是一个值收到多个值的影响,默认读取缓存
vue模板是如何编译的
一段段去截取字符串,所有的字符串截取完毕后用递归把节点打上标记最后拼接成一个render函数代码
v-model原理
主要是语法糖,使用oninput进行监听,v-bind赋值,input是val a是href,img是src
kepp-alive
把组件保留在内存中,防止重复渲染dom,减少损耗,提高体验。原理就是将需要缓存的vnode节点保存在this。cache中,生成虚拟dom的时候如果符合就直接使用
vue2双向绑定原理和如何劫持数组
object.defineproperty会对对象的属性设置get和set方法,并且增加watcher进行监听,如果改变会触发监听器,通知更新。而数组是因为劫持了数组的常用方法,比如push,pop等放置到vue的原型链中。
vue首屏加载速度
ui框架按需家在,图片压缩,gzip压缩,cdn,dns预解析,路由懒加载等