性能优化相关

1.如何优化首屏加载速度?

  1. 关键css内联:将首屏相关的css内联到html中,避免css渲染阻塞
  2. 图片懒加载:非首屏的相关图片配置懒加载,当需要时再加载,减少性能
  3. 合并压缩文件:通过构建工具合并js 和css文件,减小打包体积
  4. 通过代码分割,按需加载可以提高加载速度,包括:
    1. 路由分割-路由懒加载:通过配置动态语句import 实现路由懒加载,当跳转页面时再加载组件;
    2. 组件分割:vue2通过import 动态引入组件,vue3通过defineAsyncComponent;
    3. 第三方库分割:在config.js中配置
  5. 使用ssR服务端渲染:在服务端生成首屏HTML内容,减少客户端渲染的时间
  6. 开启Gzip压缩-服务器配置

2.如何利用浏览器缓存优化性能?

首先浏览器缓存机制包括了强缓存和协商缓存,都是通过配置HTTP缓存头控制的

强缓存:是通过ceche-control设置的;

协商缓存:当强缓存失效时,浏览器携带缓存标识想服务器发送请求验证资源是否过期?

优化策略:静态资源通过设置强缓存一年,并配置文件名哈希自动更新缓存实现;HTML文件配置no-cache,每次都要验证更新避免用户看到旧页面;

service-worker:通过前端配置js实现离线缓存

3.如何优化SPA应用的首屏加载速度?

主要是通过代码分割 按需加载:组件分割、路由分割

  1. 异步加载组件 在vue2中通过import 语法,vue3中通过defineasyncComponents异步加载组件
  2. 路由懒加载,也是通过import动态引入
  3. 预加载关键字体
  4. 关键css内联HTML 非关键css异步加载
  5. 对图片进行压缩处理、懒加载图片;
  6. 可以通过服务端渲染SSR 首屏HTML 提高加载速度;
  7. 骨架屏:提升用户的页面等待体验;
  8. 利用浏览器缓存,对静态资源设置长缓存
  9. 使用webpack 压缩js 和css,减小打包体积;

4.如何进行性能监控?

进行性能监控的目的是为了识别解决性能瓶颈,提高用户体验;性能监控分为了2种环境:

实验室监控:在预发布环境下通过lighthouse\webpageTest对应用进行全面的性能分析,后者可以实现可视化瀑布图;

真实用户监控:在生产环境下,通过web vitals+sentry 或者 chorme analytycs等工具采集真实用户的性能数据;还可以通过performance API获取性能数据

进行性能监控流程首先是

  1. 制定并确认核心性能的指标,包括;
    1. LCP:最大内容渲染的时长
    2. FID:首次输入的延迟
    3. CLS:累计布局的偏移
    4. FIN:交互的延迟
    5. 等。
  2. 在预发布环境下通过lighthouse 进行性能测试
  3. 发现并处理性能问题
  4. 验证处理后的性能效果
  5. 部署到生产环境下,采集真实用户的性能数据
  6. 发现性能问题收集问题在预发布环境复现并开始重复以上流程步骤;

性能监控是一个持续化的过程,要及时发现和解决,不断的改进和优化;

5.什么是reflow 重排和repaint 重绘?如何避免?

重绘:当元素的外观、样式改变但不影响布局时,浏览器会重新绘制元素叫重绘;

重排:元素的尺寸、布局隐藏等改变需要重新构建的过程叫重排,重排需要更新整个渲染树,性能成本很高;

常见的导致重排的操作有:

动态添加、删除、修改DOM节点;改变元素的位置、尺寸、字体大小;改变窗口大小;激活伪类等等。。

避免、优化的方法:

批量修改dom:使用documentfragment

避免逐条修改样式:使用class 代替style ,直接修改类选择器的样式,一次性修改多个样式

避免在频繁读取布局属性

使用transform和opcity 进行动画,不会触发重绘

6、如何优化渲染性能?

  1. 减少重绘和重排:
    1. 避免多次修改DOM,使用DocumentFragment批量修改dom
    2. 避免交替读写布局属性:offsetwidth;
    3. 使用transform,opcity做动画,触发GPU加速
  2. 优化JS的执行
    1. 避免长任务的执行,使用settimeout 分片或者 requestIdleCallback
    2. 使用节流和防抖
  3. 虚拟化长列表:针对大的数据,只渲染可视化区域,避免一次加载大量DOM;
  4. 优化CSS :避免选择器嵌套过深
  5. 图片进行压缩处理,使用图片懒加载
  6. 关键资源内联HTML
  7. 路由懒加载
  8. 按需加载组件、UI库等;
  9. 减少HTTP请求:
    1. 使用webpack 合并js 和css文件;
    2. 对于静态资源可以使用长缓存策略;

高频面试题:

浏览器缓存机制的区别

虚拟dom为什么快?

相关推荐
前端不太难1 小时前
Sliver 为什么能天然缩小 rebuild 影响面
flutter·性能优化·状态模式
小二·4 小时前
Vue 前端性能优化终极指南:Lighthouse 100 分实战(Vue 3 + Vite)
前端·vue.js·性能优化
LYFlied4 小时前
深入解析服务端渲染(SSR):从原理到实践
前端·性能优化
山峰哥5 小时前
3000字深度解析:SQL调优如何让数据库查询效率提升10倍
java·服务器·数据库·sql·性能优化·编辑器
Facechat6 小时前
视频混剪-性能优化
性能优化·音视频
卓码软件测评6 小时前
CMA-CNAS软件测评报告机构【Apifox动态Mock响应处理复杂业务逻辑设计】
测试工具·性能优化·单元测试·测试用例
麦兜*7 小时前
【Spring Boot】 接口性能优化“十板斧”:从数据库连接到 JVM 调优的全链路提升
java·大数据·数据库·spring boot·后端·spring cloud·性能优化
大猪宝宝学AI1 天前
【AI Infra】SonicMoE论文笔记
论文阅读·人工智能·性能优化
DeepFlow 零侵扰全栈可观测1 天前
3分钟定位OA系统GC瓶颈:DeepFlow全栈可观测平台实战解析
大数据·运维·人工智能·云原生·性能优化
RaidenLiu1 天前
Offstage / Visibility:不可见真的就不消耗性能吗
前端·flutter·性能优化