面试题答案
一键面试路由懒加载
- 原理:将路由对应的组件分割成一个个单独的文件,只有在路由被访问的时候才加载对应的组件,而不是在项目启动时就全部加载,从而减少首屏加载的文件体积。
- Vue CLI 中的实现:在
router/index.js
中,使用动态import()
语法实现懒加载。例如:
const router = new VueRouter({
routes: [
{
path: '/home',
name: 'Home',
component: () => import('@/views/Home.vue')
}
]
})
服务器端渲染(SSR)
- 原理:在服务器端将 Vue 组件渲染为 HTML 字符串,然后将这个 HTML 发送到客户端,客户端只需进行 hydration(将静态 HTML 激活为可交互的 Vue 应用),这样首屏内容无需等待 JavaScript 加载和执行就能直接呈现给用户,加快首屏加载速度。
- Vue CLI 中的配置与实现要点:
- 初始化 SSR 项目:使用
vue-cli
创建一个 SSR 项目,运行vue init webpack -s server-renderer my-project
。 - 目录结构:项目会有
client
和server
两个入口。client
入口负责在客户端激活应用,server
入口负责在服务器端渲染应用。 - 配置文件:
webpack.client.conf.js
和webpack.server.conf.js
分别用于客户端和服务器端的打包配置。需要注意的是服务器端打包时要排除一些仅在客户端可用的代码(如window
、document
等)。 - 数据预取:在服务器端渲染时,可以在组件的
asyncData
或beforeCreate
钩子中进行数据预取,将数据填充到 HTML 中,避免客户端再发起请求获取数据。
- 初始化 SSR 项目:使用
资源预加载
- 原理:在 HTML 中使用
<link rel="preload">
标签,告诉浏览器提前加载指定的资源(如 JavaScript、CSS、图片等),这样当需要使用这些资源时,它们已经在缓存中,可以快速使用,提升页面加载性能。 - Vue CLI 中的配置与实现要点:
- 在 HTML 模板中使用:在
public/index.html
中添加预加载标签。例如预加载一个 CSS 文件:
- 在 HTML 模板中使用:在
<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 构建的大规模项目的首屏加载性能。