MST
星途 面试题库

面试题:Vue CLI 构建的大规模 Vue 项目,如何解决首屏加载性能问题?

对于 Vue CLI 构建的大规模项目,首屏加载速度至关重要。从路由懒加载、服务器端渲染(SSR)、资源预加载等方面,详细说明如何综合运用这些技术来提升首屏加载性能,以及在 Vue CLI 中相应的配置与实现要点。
38.3万 热度难度
前端开发Vue

知识考点

AI 面试

面试题答案

一键面试

路由懒加载

  1. 原理:将路由对应的组件分割成一个个单独的文件,只有在路由被访问的时候才加载对应的组件,而不是在项目启动时就全部加载,从而减少首屏加载的文件体积。
  2. Vue CLI 中的实现:在 router/index.js 中,使用动态 import() 语法实现懒加载。例如:
const router = new VueRouter({
  routes: [
    {
      path: '/home',
      name: 'Home',
      component: () => import('@/views/Home.vue')
    }
  ]
})

服务器端渲染(SSR)

  1. 原理:在服务器端将 Vue 组件渲染为 HTML 字符串,然后将这个 HTML 发送到客户端,客户端只需进行 hydration(将静态 HTML 激活为可交互的 Vue 应用),这样首屏内容无需等待 JavaScript 加载和执行就能直接呈现给用户,加快首屏加载速度。
  2. Vue CLI 中的配置与实现要点
    • 初始化 SSR 项目:使用 vue-cli 创建一个 SSR 项目,运行 vue init webpack -s server-renderer my-project
    • 目录结构:项目会有 clientserver 两个入口。client 入口负责在客户端激活应用,server 入口负责在服务器端渲染应用。
    • 配置文件webpack.client.conf.jswebpack.server.conf.js 分别用于客户端和服务器端的打包配置。需要注意的是服务器端打包时要排除一些仅在客户端可用的代码(如 windowdocument 等)。
    • 数据预取:在服务器端渲染时,可以在组件的 asyncDatabeforeCreate 钩子中进行数据预取,将数据填充到 HTML 中,避免客户端再发起请求获取数据。

资源预加载

  1. 原理:在 HTML 中使用 <link rel="preload"> 标签,告诉浏览器提前加载指定的资源(如 JavaScript、CSS、图片等),这样当需要使用这些资源时,它们已经在缓存中,可以快速使用,提升页面加载性能。
  2. Vue CLI 中的配置与实现要点
    • 在 HTML 模板中使用:在 public/index.html 中添加预加载标签。例如预加载一个 CSS 文件:
<link rel="preload" href="<%= BASE_URL %>css/app.css" as="style">
- **在 JavaScript 中动态预加载**:也可以在 Vue 组件的 `mounted` 钩子中通过 JavaScript 创建 `link` 元素来动态预加载资源。例如:
mounted() {
  const preloadLink = document.createElement('link')
  preloadLink.rel = 'preload'
  preloadLink.href = '/js/someScript.js'
  preloadLink.as = 'script'
  document.head.appendChild(preloadLink)
}

通过综合运用路由懒加载减少首屏加载文件体积、服务器端渲染直接输出首屏 HTML 以及资源预加载提前准备好所需资源,能够有效提升 Vue CLI 构建的大规模项目的首屏加载性能。