前端性能优化完整指南 - 面试答题模板 🚀
一、整体思路
回答性能优化问题时,建议从以下几个维度展开:
- 加载性能
- 运行时性能
- 用户体验优化
- 构建优化
- 网络优化
关键是要体现出系统性思维,既要讲思路,也要有具体措施。
二、详细展开
1. 加载性能优化
1.1 资源加载优化
// 示例: 图片懒加载
const lazyImages = document.querySelectorAll('.lazy-image');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy-image');
observer.unobserve(img);
}
});
});
lazyImages.forEach(img => imageObserver.observe(img));
具体措施:
- 路由懒加载
- 图片懒加载
- 预加载关键资源
- 使用适当的图片格式(WebP)
- 使用字体子集
1.2 资源体积优化
// webpack配置示例
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
common: {
minChunks: 2,
priority: -20
}
}
}
}
}
具体措施:
- 代码分割
- Tree Shaking
- 压缩资源(JS/CSS/图片)
- 提取公共代码
- 使用现代构建工具(Vite)
2. 运行时性能优化
2.1 渲染性能
// React性能优化示例
const MemoizedComponent = React.memo(({ data }) => {
return (
<div>
{data.map(item => (
<Item key={item.id} {...item} />
))}
</div>
);
});
// Vue性能优化示例
export default {
name: 'OptimizedList',
computed: {
processedData() {
return this.data.filter(item => item.visible);
}
}
}
具体措施:
- 虚拟列表
- 防抖节流
- 避免重复渲染
- CSS硬件加速
- Web Workers处理计算密集任务
2.2 JavaScript性能
// 事件委托示例
document.getElementById('list').addEventListener('click', function(e) {
if(e.target.tagName === 'LI') {
handleClick(e.target);
}
});
// 防抖示例
function debounce(fn, delay) {
let timer = null;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, args);
}, delay);
};
}
具体措施:
- 事件委托
- 缓存计算结果
- 避免内存泄漏
- 优化循环
- 使用requestAnimationFrame
3. 用户体验优化
3.1 感知性能
<!-- 骨架屏示例 -->
<template>
<div v-if="loading">
<div class="skeleton-header"></div>
<div class="skeleton-content">
<div class="skeleton-item" v-for="i in 5" :key="i"></div>
</div>
</div>
<div v-else>
<!-- 实际内容 -->
</div>
</template>
具体措施:
- 骨架屏
- Loading状态
- 预加载
- 渐进式加载
- 及时反馈
3.2 页面可用性
具体措施:
- 首屏优化
- 关键路径渲染
- 异步加载非关键资源
- 保持交互响应性
- 优化动画性能
4. 构建优化
// Vite配置示例
export default defineConfig({
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['vue', 'vue-router'],
utils: ['lodash-es', 'axios']
}
}
},
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
},
}
}
});
具体措施:
- 优化构建配置
- 合理分包
- 缓存利用
- 并行构建
- 构建产物分析
5. 网络优化
# Nginx配置示例
location / {
gzip on;
gzip_types text/plain application/javascript text/css;
expires 1y;
add_header Cache-Control "public, no-transform";
}
具体措施:
- HTTP2
- 启用Gzip
- CDN加速
- 合理缓存策略
- DNS预解析
三、性能指标
重点关注以下指标:
- First Contentful Paint (FCP)
- Largest Contentful Paint (LCP)
- First Input Delay (FID)
- Cumulative Layout Shift (CLS)
- Time to Interactive (TTI)
// 性能监控示例
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
console.log('LCP:', entry.startTime, entry);
}
}).observe({entryTypes: ['largest-contentful-paint']});
四、性能监控与分析
4.1 监控工具
- Chrome DevTools
- Lighthouse
- Web Vitals
- Performance API
4.2 性能分析方法
- 建立基准
- 识别瓶颈
- 优化措施
- 效果验证
- 持续监控
五、答题技巧
- 先表明优化的整体思路
- 按维度分类讲解
- 重点说明2-3个具体优化措施
- 结合实际项目经验
- 说明监控和效果评估方法
六、实际项目案例
可以准备1-2个实际项目的性能优化案例:
- 问题背景
- 优化方案
- 实施过程
- 效果数据
- 经验总结
记住: 性能优化是一个持续的过程,需要结合实际场景来选择合适的优化策略。