
文章目录 4
题目
一个 Vue/React 电商首页存在以下问题:
首屏白屏时间较长
商品图片加载缓慢
页面滚动时掉帧
点击“加入购物车”后响应延迟
打包后的 JavaScript 体积较大
如果由你负责性能优化,你会如何定位问题并制定优化方案?
考察点
性能指标与测量工具
网络、资源加载和构建优化
浏览器渲染与长任务
Vue/React 渲染优化
优化方案的优先级和效果验证
参考答案
我会按照“测量—定位—优化—验证”的流程处理,而不是直接修改代码。
使用 Lighthouse、Chrome DevTools、Performance、Network 等工具建立性能基线,重点观察首屏加载、最大内容渲染、交互延迟、长任务、请求瀑布图和资源体积。
首屏加载方面:
路由和非首屏组件按需加载
拆分体积较大的依赖
移除无用代码,检查
核心资源使用 preload,非关键脚本延迟加载
使用 CDN、HTTP 缓存和压缩
必要时使用 、 或骨架屏
图片方面:
使用 WebP、AVIF 等现代格式
根据展示尺寸生成响应式图片
非首屏图片懒加载
设置图片宽高,避免加载后引起布局偏移
滚动掉帧方面:
通过 Performance 找出长任务和频繁重排
对高频事件进行节流
避免在循环中交替读取和修改布局属性
长列表使用虚拟列表
动画优先使用
transform和opacity
点击响应延迟方面:
减少主线程上的同步计算
将大任务拆分为多个小任务
重计算考虑使用
检查组件是否发生了不必要的级联更新
点击后立即提供视觉反馈,异步完成后续操作
框架层面:
Vue 中避免不必要的深层响应式和重复计算
React 中检查不合理的状态提升、Context 大范围更新和重复渲染
谨慎使用缓存优化,先通过性能分析确认瓶颈
完成后使用相同设备、网络条件和测试流程重新测量,并结合真实用户监控验证线上效果。
常见误区
一上来就使用
memo、useMemo或缓存,却没有定位瓶颈只关注打包体积,不关注代码执行时间
用骨架屏掩盖慢加载,却没有降低真实加载时间
为所有图片启用懒加载,导致首屏关键图片更晚出现
只依赖本地 Lighthouse 得分,没有观察真实用户数据
相关文章
- 面试题-基础
Vue 3 响应式解构:为什么替换 user 后出现“李四 / 王五”
通过一道 Vue 3 代码题,区分 reactive 对象解构、嵌套属性修改与对象替换的行为,并用 toRef 保持源属性关联。文章保留首次作答及追问补答,说明从误判到纠正的过程。
- 面试题-基础
Vue 3 编辑弹窗:草稿状态、取消重开与父子数据契约
以一个始终挂载的姓名编辑弹窗为场景,给出覆盖数据归属、保存取消、重开初始化和外部更新冲突的完整 Vue 3 解法。结合首次回答与递进补答,说明本地草稿、脏标记和版本校验各自解决的问题。
- 面试题-基础
Vue 3 首屏白屏 3 秒:从性能定位到 Long Task、Web Worker 与虚拟列表
一次完整的 Vue 3 首屏性能面试复盘,从环境复现、Network 与 Performance 定位,逐步深入到 Long Task 分析、Web Worker 和虚拟列表的适用边界。
评论
0 条评论会在审核后展示,邮箱不会公开。