面试题答案
一键面试- 路由懒加载:
- 原理:将路由对应的组件分割成不同的代码块,当路由被访问时才加载对应的组件,而不是在应用启动时就加载所有组件,减少初始加载的代码量,提高首屏加载速度。例如
const router = new VueRouter({ routes: [ { path: '/about', component: () => import('./views/About.vue') } ] })
,import('./views/About.vue')
这种动态导入语法实现了组件的懒加载。
- 原理:将路由对应的组件分割成不同的代码块,当路由被访问时才加载对应的组件,而不是在应用启动时就加载所有组件,减少初始加载的代码量,提高首屏加载速度。例如
- 设置合理的缓存策略:
- 原理:利用
keep - alive
组件来缓存路由组件实例,避免组件反复创建和销毁,减少性能开销。比如在router - view
外层包裹keep - alive
,<keep - alive><router - view></router - view></keep - alive>
,这样切换到相同路由时,组件实例会从缓存中复用,不会重新创建,组件的状态也得以保留。
- 原理:利用
- 优化路由守卫:
- 原理:避免在路由守卫中执行复杂或耗时的操作。路由守卫如
beforeEach
、beforeEnter
等会在路由切换时执行,如果其中包含大量计算、网络请求等操作,会阻塞路由切换,影响性能。应尽量简化守卫逻辑,将复杂操作放到组件内部合适的生命周期钩子函数中执行,确保路由切换能够快速响应。
- 原理:避免在路由守卫中执行复杂或耗时的操作。路由守卫如
- 减少不必要的重渲染:
- 原理:确保路由组件的数据变化不会触发不必要的重渲染。例如,通过使用
Object.freeze
冻结一些不会变化的数据,使Vue不再追踪其变化,避免因这些数据触发的不必要的组件更新。同时,合理使用watch
选项,精确监听数据变化,避免无效的监听器导致不必要的重渲染。
- 原理:确保路由组件的数据变化不会触发不必要的重渲染。例如,通过使用