vue面试资料复习

152 阅读3分钟

一、跨域通信的几种方式方式如下:

1JSONP 
2WebSocket 
3CORS 
4Hash 
5、postMessage

二、vue中的八种组件通信方式

1.父组件向子组件传值   props/$emit
2.父子组件之间的通信   $children/$parent
3.父子组件通信         父组件provide/子组件inject
4.ref/refs
5.eventBus 事件总线
6.vuex 状态管理器
7.localStorage/sessionStorage
8.$attrs/$listeners


总结:
父子组件通信: props; $parent / $children; provide / inject ; ref ;  $attrs / $listeners
兄弟组件通信: eventBus ; vuex
跨级通信:  eventBus;Vuex;provide / inject 、$attrs / $listeners

三、vue的响应原理 proxy于object于defineProperty

ProxyObject.defineProperty 的使用方法看似很相似,其实Proxy是在「更高维度」上去拦截属性的修改的
响应式的原理,其实就是在 Proxy 第二个参数 handler 也就是陷阱操作符中,拦截各种取值、赋值操作,
依托 track 和 trigger 两个函数进行依赖收集和派发更新。

track 用来在读取时收集依赖。
trigger 用来在更新时触发依赖。

四、Vue 里的 computed 和 watch 的区别

如果一个数据需要经过复杂计算就用 computed
如果一个数据需要被监听并且对数据做一些操作就用 watch

五、vue的性能优化

代码层面的优化
1.v-if和v-show区分使用场景
2.computed 和 watch  区分使用场景
3.v-for 遍历必须为 item 添加 key,且避免同时使用 v-if
4.长列表性能优化 object.freeze
5.事件的销毁
6.图片资源懒加载
7.路由懒加载 将路由对应的组件分割成不同的代码块,路由被访问的时候才加载对应的组件
8.第三方插件的按需引入 babel-plugin-component
9.优化无限列表性能
10.服务端渲染ssr or 预渲染

webpack层面的优化
1.对图片进行压缩
2.减少es6转为es5的冗余代码
3.提取公共代码
4.模板预编译  使用单文件组件
5.提取组件的css
6.优化soureMap 解决不好调式代码问题
7.构建结果输出分析基础的


web技术优化
1.开启gzip压缩
2.浏览器缓存
3.cdn使用
4.说用chrome performance查找性能瓶颈

六、路由加载hash和history区别

1.hash只改变后面的值,就不会导致浏览器向服务器发出请求,不发起请求,不会刷新页面
2.history,通过pushState和replaceState

七、es6常见新特性

1.es6类class
2.for...offor...in
3对象的解构
4.rest操作符/spread操作符
5.模板字符串
6.const let
7.promise
8.async函数
9.module

八、vue的data为什么是一个方法

  • 因为组件是用来复用的,且 JS 里对象是引用关系,如果组件中 data 是一个对象,那么这样作用域没有隔离,子组件中的 data 属性值会相互影响,如果组件中 data 选项是一个函数,那么每个实例可以维护一份被返回对象的独立的拷贝,组件实例之间的 data 属性值不会互相影响;而 new Vue 的实例,是不会被复用的,因此不存在引用对象的问题

  • 一个组件被复用多次的话,也就会创建多个实例。本质上,这些实例用的都是同一个构造函数。如果data是对象的话,对象属于引用类型,会影响到所有的实例。所以为了保证组件不同的实例之间data不冲突,data必须是一个函数