1. 性能优化关联项
汇总了场景前端性能优化的问题,并进行了相关问题的扩展,相关大纲如下:
- 加载优化(让页面更快出现)
- 常见场景题/问题
- SPA首屏加载慢怎么解决?
- 后端一次性返回10万条数据如何处理?
- 图片太多影响加载速度如何优化?
- 浏览器缓存机制是怎么样的?
- 核心优化逻辑和关联策略
- 网络层面
- CDN加速
- Gzip压缩
- HTTP缓存(强缓存/协商缓存)
- HTTP/2升级
- 资源层面
- 路由懒加载
- 代码拆分(Code Splitting)
- Tree Shaking
- 图片优化(WebP格式,压缩,响应式图片srcset)
- 雪碧图
- 数据层面
- 分页加载
- 虚拟滚动/列表
- 数据分片(时间分片)
- 网络层面
- 常见场景题/问题
- 渲染与运行时优化(让页面操作更流畅)
- 常见场景题/问题
- 什么是重排和重绘?如何避免?
- 如何避免不必要的渲染(如React/vue)?
- 长列表滚动卡顿怎么办?
- v-if和v-for为什么不能一起使用?
- 核心优化逻辑和关联策略
- 渲染流程
- 理解关键渲染路径,将CSS放头部,JS放底部
- JavaScript执行
- 防抖(Debounce)与节流(Throttle)
- 避免长任务
- 使用requestAnimationFrame优化动画
- 框架层面
- React的React.memo,useMemo,useCallback
- Vue的v-once
- 合理使用computed
- 避免不必要的数据响应式(Object.freeze)
- 样式与DOM
- 减少DOM操作
- 使用CSS3硬件加速(transform:translated3d())
- 避免复杂CSS选择器
- 渲染流程
- 常见场景题/问题
- 代码与架构优化(从根源上提升质量)
- 常见场景题/问题
- 如何写一个防抖/节流函数?
- 如何预防内存泄漏?
- 如何对项目进行重构?
- 如何进行权限设计?
- 核心优化逻辑和关联策略
- 编码规范
- 模块化,组件化
- 使用事件委托
- 避免内存泄漏(清除定时器,解绑全局事件)
- 工程化
- Webpack配置优化(如happyPack)
- 接入CI/CD
- 代码规范(ESLint)
- 架构设计
- 选择合适的存储(IndexedDB缓存结构化数据)
- 设计可扩展的API
- 引入SSR/静态化
- 编码规范
- 常见场景题/问题
- 服务器与网络优化(打通最后一公里)
- 常见场景题/问题
- CDN是什么?原理是什么?
- cookie是如何携带的?如何优化?
- HTTP/2有哪些优势?
- 核心优化逻辑和关联策略
- 传输协议
- 使用CDN分发静态资源
- 配置keep-alive
- 利用HTTP/2多路复用
- 服务端配置
- 启用Gzip压缩
- 配置Etag
- 设置缓存过期的时间
- 数据交换
- 减少Cookie大小,静态资源使用无Cookie域名
- 接口请求合并
- 使用GET for AJAX(使用时)
- 传输协议
- 常见场景题/问题
在开始前端性能优化工作之前,首先要做到的第一点,就是要先确认问题的原因.
举个例子,现在要解决一个性能极差的项目,如果项目功能较多,在碰上代码不熟悉,根本无从下手进行更改.
所以在准备优化项目之前,要循序一个核心逻辑:先排查定位,在分级优化,最后验证复盘.
遵循从易到难,从前端到后端的排查顺序,优先解决影响最大的性能问题,用量化工具衡量优化效果,从而形成完整的性能优化闭环.毕竟有数据有真相,也好拿出来证明自己的能力.
2. 整体优化思路
2.1 建立衡量标准,明确优化目标
- 确定核心指标: 加载指标(
FCP,LCP,TTI),交互指标(FID,TBT),视觉稳定性指标(CLS).相关信息可以参考下Google的Core Web Vitals.可以大概的参考下这个网站:Web Vitals - 设定优化目标: 比如"首屏时间
LCP从5.2s优化到2.5s以内"等. - 选型工具: 确定工具,比如
Lighthouse,Chrome DevTools,WebPageTest等进行统一测量,保证前后对比的一致性.
前端性能核心标准含义可参考(前端性能核心标准含义)
2.2 全面体检,定位瓶颈
- 使用
Lighthouse生成整体报告,获取关键指标和优化建议. - 用
Chrome DevTools的Performance面板记录页面加载或者是交互的过程,分析长任务,渲染瓶颈,JS执行时间. - 用
Network面板查看资源加载时序,找出阻塞渲染的资源,重复请求或者大体积文件. - 检查代码,比如是否有内存泄漏(
Memory面板),是否合理使用缓存,是否存在不必要的渲染. - 工具配合使用,从网络,渲染,代码三个方面定位问题.
推荐一个如何用工具定位性能瓶颈的文档,里面有一个简单举例说明:如何用工具定位性能瓶颈
2.3 制定优化方案,分层解决问题
- 加载: 减少请求数量,压缩资源大小,缓存,合理使用懒加载,
CDN,提取预加载关键资源. - 运行: 优化
JS执行(长任务拆分),减少页面重排重绘,使用虚拟列表,防抖节流. - 构建: 代码分割,
Tree Shaking,Scope Hoistring,优化第三方库的引入. - 架构:
SSR/静态化,服务端优化,缓存策略,HTTP/2.
2.4 分步实施,从点到面
- 按照优先级排序,先解决阻塞渲染的关键问题(如未优化的图片,未压缩的
CSS/JS),然后再优化运行时性能. - 每次只改一个点,并立即测量并验证结果,避免同时多个改动,无法去评估每个优化的收益.
2.5 持续监控,防止回退
- 引入性能监控工具(如
Lighthouse CI,Web Vitals的JS库)到CI/CD流程. - 设置性能预算,超过阈值进行告警或构建失败.