vue面试题(四)

一、为何组件的data是一个函数

Object是引用数据类型,如果不用function返回,每个组件的data都是内存的同一个地址,一个数据改变了其他也改变了;
JavaScript只有函数构成作用域(注意理解作用域,只有函数{}构成作用域,对象的{}以及if(){}都不构成作用域),data是一个函数时,每个组件实例都有自己的作用域,每个实例相互独立,不会相互影响。

二、ajax应该放在那个生命周期里?

应该放在mounted生命周期里
为什么?
js是单线程,ajax是异步获取数据
为什么不在 created 里去发ajax?created 可是比 mounted 更早调用啊,更早调用意味着更早返回结果,那样性能不是更高?
首先,一个组件的 created 比 mounted 也早调用不了几微秒,性能没啥提高;
而且,等到异步渲染开启的时候,created 就可能被中途打断,中断之后渲染又要重做一遍,想一想,在 created 中做ajax调用,代码里看到只有调用一次,但是实际上可能调用 N 多次,这明显不合适。
相反,若把发ajax 放在 mounted,因为 mounted 在第二阶段,所以绝对不会多次重复调用,这才是ajax合适的位置.

三、何时使用异步组件?

  • 加载大组件时
    例如:echarts

  • 路由异步加载

四、何时使用keep-alive?

缓存组件,不需要重复渲染?
比如多个静态tab页面的切换

五、Vuex中action和mutation有何区别

action中处理异步,mutation不可以
mutation做原子操作,原子:每次只做一个操作
action可以整合多个mutation

六、vue常见的性能优化方式?

  • 合理使用v-show和v-if
  • 合理使用computed
  • v-for中使用key,以及避免和v-if同时使用
  • 自定义事件,DOM事件机试销毁,不销毁的话可能会造成内存泄漏,越来越卡
  • 合理使用异步组件
  • 合理使用keep-alive
  • 图片懒加载
  • 路由懒加载
  • 使用第三方插件实现按需加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值