一、跨域通信的几种方式方式如下:
1、JSONP
2、WebSocket
3、CORS
4、Hash
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
Proxy和Object.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...of和for...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必须是一个函数