面试题答案
一键面试代码层面
- 路由懒加载 通过动态导入路由组件实现懒加载,减少初始加载时的代码体积。例如:
const router = new VueRouter({
routes: [
{
path: '/home',
component: () => import('./views/Home.vue')
}
]
})
- 组件懒加载 对非首屏渲染的组件使用懒加载。在Vue中可以这样写:
Vue.component('BigComponent', () => import('./components/BigComponent.vue'))
- 优化数据获取
避免在每个请求中重复获取相同的数据。可以使用缓存机制,例如在
nuxt.config.js
中配置serverMiddleware
来实现简单的缓存:
serverMiddleware: [
{
path: '/api',
handler: '~/server/api.js'
}
],
在api.js
中实现缓存逻辑:
const cache = {}
export default function (req, res, next) {
const key = req.url
if (cache[key]) {
res.json(cache[key])
} else {
// 实际数据获取逻辑
const data = { message: 'new data' }
cache[key] = data
res.json(data)
}
}
- 减少全局变量使用 全局变量可能会导致内存泄漏和代码耦合度增加。尽量将数据和逻辑封装在组件内部。
服务器配置层面
- 启用HTTP/2 HTTP/2具有多路复用、头部压缩等特性,能显著提升性能。在Nginx中配置启用HTTP/2:
server {
listen 443 ssl http2;
# 其他配置
}
- 负载均衡 使用负载均衡器(如Nginx、HAProxy)将请求均匀分配到多个服务器实例上,提高整体处理能力。以Nginx为例:
upstream myapp {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
# 其他代理配置
}
}
- 合理配置缓存
配置服务器端缓存,如使用Redis作为缓存服务器。在Node.js应用中可以使用
ioredis
库:
const Redis = require('ioredis')
const redis = new Redis()
// 获取数据时先检查缓存
redis.get('key').then(data => {
if (data) {
// 使用缓存数据
} else {
// 从数据库获取数据并设置到缓存
const newData = { message: 'new data' }
redis.set('key', JSON.stringify(newData))
}
})
- 优化服务器资源分配 根据应用的实际负载情况,合理分配CPU、内存等资源。例如,对于内存密集型的SSR应用,适当增加服务器内存。