1.如何优化单页面优化应用加载慢的问题?
1.使用CDN
2.路由懒加载
3.Gzip压缩
2.$router.push/.replace/.go的区别?
这几个方法与window.history的 API相似的。
这个3个方法分别对应:window.history.pushState/.replaceState/.go
1.router.push(),会添加新的history添加记录,会打开新的地址,点击浏览器的回退,即可回到上一页地址,点击下一页,又可以回来。
2.router.replace(),不会向history添加记录,新的地址会覆盖掉当前的地址。
3.router.go(),指的是跳转到第几页,正数时会往前跳,负数时往回舔。0则为当前页,起到刷新的作用。
history还有length属性,可以用于判断,当前页是否为当前页。
3.响应状态码?
4.封装接口?
接口封装指的是,用axios封装请求拦截和响应拦截,目的是统一管理接口。
如上图,
1.在http.js里使用封装axios请求拦截和响应拦截,还有相关的配置。
2.在baseURL.js中,定义一个对象,存请求的地址。
3.在request.js中导入http.js/baseURL,并封装成请求方法。
4.在test.vue中导入方法,并调用。
对于es6模块化不了解的,可以百度搜索,看相应的文章。
5.computed和watch的区别?
- watch监听data中的数据:
当data中的数据发生变化,那就会立即执行watch中的函数函数还会返回oldVal和newVal。
监听路由的变化:
使用$router.path监听路由的变化。
export default {
data () {
return {
result: '找不到工作',
person: {
who: '我啊',
why: '又老又菜'
}
}
},
watch: {
name: function (oldVal, newVal) {
console.log(oldVal)
console.log(newVal)
},
// 当监听一个对象时,需要写成对象,因为写成对象才能监听对象里面的属性变化
person: {
handler: function (oldVal, newVal){
console.log(oldVal)
console.log(newVal)
// 当对象里面的属性改变后,立即执行打印,但打印结果是两个一样的对象,不会展示新属性和旧属性。原因是对象浅拷贝
},
deep: true
},
// 监听路由的变化
$route.path: function (){}
}
}
- computed计算属性的作用:是为了解决HTML代码中复杂的js代码(HTML代码中可以嵌套js代码),把复杂的js代码通过计算属性来解决 。
- 两者的区别
computed中定义的每一个计算属性,都会被缓存起来,只有当计算属性里面依赖的一个或多个属性变化了,才会重新计算当前计算属性的值。
1、支持数据的缓存。
2、函数内部的数据改变也会触发。
3、不支持异步,当computed内部有异步操作时computed无效
4、如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,一般用computed
5、computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值。
watch是属性监听器,一般用来监听属性的变化(也可以用来监听计算属性函数),并做一些操作
1、不支持缓存
2、支持异步
3、只可以设置一个函数,可以带有两个参数
4、监听数据必须是data中声明过或者父组件传递过来的props中的数据,当数据变化时,触发其他操作
参考链接:https://www.jianshu.com/p/de8296a07ff7
6.keep-alive的使用
keep-alive用于缓存组件。
包含两个属性:
included/exclude: 用于声明那些组件会被缓存
由于被缓存,组件不会执行beforeDestroy和destroyed,所以keep-alive会提供两个钩子函数。
切换到缓存组件时执行:activated。一般在created、mounted进行的数据请求放到这里来
离开缓存组件时执行:deactivated 。相当于销毁阶段执行的beforeDestroy和destroyed勾子函数。
被keep-alive包裹的组件内部引用的组件也会被缓存起来。