Skip to content

Vue 2:路由、SPA、SEO 与项目优化

一、Vue Router 2.x 守卫

分类

  • 全局beforeEachbeforeResolveafterEach
  • 路由独享beforeEnter
  • 组件内beforeRouteEnter(无 this,可用 next(vm=>{}))、beforeRouteUpdatebeforeRouteLeave

next 行为

  • next():放行。
  • next(false):中断。
  • next({ path }) / next('/login'):重定向。

执行顺序

导航触发 → 失活组件 beforeRouteLeave全局 beforeEach → 重用组件 beforeRouteUpdatebeforeEnter → 解析异步组件 → beforeRouteEnterbeforeResolve → … → afterEach → DOM 更新 → beforeRouteEnter 的回调传入实例。

路由元信息 meta

权限、标题等自定义字段的常见载体。

API

  • 跳转:router.push / replace / go
  • 信息:this.$route.paramsquery

二、路由模式

模式原理要点URL服务端
hash# 后片段不变更整页请求#一般无需额外配置
historyhistory.pushState + popstate#需服务端回退到 index.html

旧稿中 history/hash 两行描述曾有重复粘贴,此处按主流文档校正:history 美观但依赖服务端兜底


三、SPA vs MPA

SPA(单页应用)

  • 一个 HTML 壳,路由切换由前端渲染,无整页刷新。
  • 优点:体验连贯、前后端分离、组件化。
  • 缺点:首包体积、SEO、首屏时间需额外优化。

MPA(多页应用)

  • 每页独立 HTML,跳转整页刷新。
  • 优点:首屏可更小、SEO 友好(页面级)、隔离性强。
  • 缺点:切换顿挫、公共资源重复请求风险、跨页状态传递麻烦。

四、SPA 与 SEO

手段概览:SSR(Nuxt 等)、SSG(构建期预渲染)、辅以 History 路由、动态 title/meta、结构化数据 JSON-LD

文档示例包含 vue-meta / vue-meta@3 用法与 meta 标签片段,可按项目选用 @vueuse/head 等现代替代。


五、图片与加载优化(原 vue2 优化

WebP

相同观感下体积通常优于传统 JPG/PNG;现代浏览器与移动端支持已较完备。

懒加载

  • IntersectionObserver + 自定义指令
  • vue-lazyload / vue3-lazyload(示例以 Vue 3 插件为例,Vue 2 可选用兼容版本)。

六、通用性能清单

代码层

  • v-if / v-show 按切换频率选用。
  • computed / watch 各司其职。
  • v-for + 稳定 key,避免滥用 index。
  • 销毁副作用beforeDestroy 清理定时器、监听、$bus 订阅。
  • 路由/组件懒加载import()
  • 列表:虚拟滚动、分页。
  • 交互:防抖、节流;骨架屏 / Loading。

构建层

  • 生产模式压缩、Tree-shaking、splitChunks、图片压缩、按需引入组件库等。

进阶

  • SSR / SSG、微前端(qiankun 等)按规模引入。

框架通用注意

  • Vue 3 编译期 PatchFlag、静态提升、cacheHandler 等(对比 Vue 2 运行时路径)。
  • 组件划分:避免无意义深层嵌套;状态上提;复杂页用 store / composable 收敛逻辑。
  • 内存泄漏:定时器、全局事件、闭包持有 DOM 等需在销毁路径释放。

七、小结

  • 路由:守卫顺序、meta 权限、history 服务端配置。
  • SPA:体验与 SEO、首屏的矛盾用 SSR/SSG 与构建优化平衡。
  • 性能:渲染策略 + 网络资源 + 打包拆分三位一体。

下一章:错误处理·跨域·内置组件与插件