性能优化

77 阅读1分钟

代码分割

传统静态导入
所有组件代码会合并到初始包中,增加首屏加载时间。
import Login from './components/login.vue' // 所有组件打包到同一个chunk
动态导入:
将该组件分离为独立的 JavaScript 文件(如 login.hash.js)。
按需加载:只有当访问 / 路由时,才会下载并执行该组件的代码。
初始加载的 JS 包体积减小,加快 首屏渲染速度(特别是大型应用)
component: () => import('./components/login.vue')

动画、过渡效果优化

requestAnimationFrame(简称 rAF)和 setTimeout 都可以用于延迟执行代码,但 rAF 在动画和频繁更新的场景中具有显著优势。

requestAnimationFrame
  • 屏幕刷新率同步,避免丢帧或过度渲染
  • 浏览器会自动优化调用时机(如页面不可见时暂停)
  • 浏览器会合并多次 DOM 操作,减少不必要的重绘(Repaint)和回流(Reflow)
setTimeout
  • 延迟执行工具,不关心渲染时机
  • 严格按指定时间触发,无论页面状态
  • 可能因主线程阻塞导致动画卡顿或不连贯
  • 每执行一次都会触发页面布局计算

增加路由元信息meta

在导航守卫或路由对象中访问路由的原信息,增加页面标识

image.png

滚动行为

  • 使用前端路由切换新路由时,想要页面滚动到顶部或者保持原先位置,vue-router可以自定义路由切换时页面如何滚动

image.png