网站首页 > 技术文章 正文
主要有以下几个方面排查应用反应慢问题
- 加载慢
- 资源下载慢
- 首屏并发请求资源过多
- 首屏接口慢
- 首屏对应的 JS 执行慢
- 首屏渲染慢
- 首屏加载静态资源过大
- .......
- 执行过程慢
- 接口慢
- long tasks 太多, 阻塞 JS 执行
- 内存泄漏
- 重绘重排 过多
- 关键节点没有加 节流防抖
- .......
主要排查手段有哪些
- 通过建立性能监控指标: 通过真实用户数据反馈, 来判断用户是否卡顿, 包含网络监控、运行时性能监控、
- Chrome devtools: NetWork 主要排查网络问题
- Chrome devtools: Performance 主要细查性能运行时性能,包含了 long tasks、render 次数、重排重绘、执行时间线、阻塞场景
- Chrome devtools: Performance monitor 主要监控用户运行时性能,看看是否有内存泄露
- React Developer Tools: 可以用于追踪 react 应用性能、渲染次数、重排重绘
- Lighthouse: 全面分析网页性能的一个工具、支持浏览器插件
- webpack-bundle-analyzer: 进行产物依赖分析、包大小分析
- 抓包: 通过抓包的方式, 看看线上请求分析、请求模拟、网络劫持之后仅仅看 JS 执行时间
- E2E测试: 通过 E2E 进行性能预检, 每次上线前进行一系列系统操作, 看看时间耗时和线上耗时波动
主要解决办法和思路
- 资源加载方向
- 使用 tree shaking 减少包体积
- 代码压缩和混淆
- 对于高版本浏览器, 直接使用 ES6 语法,低版本浏览器再使用 ES5(es6 语法代码量会比编译成 es5 代码量小很多, 且执行速度也快)
- 使用 split chunks 进行大包拆分、小包复用
- 使用 gzip
- 使用 图片压缩
- 使用 雪碧图
- 图标使用 iconfont 加载
- 懒加载, 仅加载首屏必要资源
- 使用 tailwindcss 等技术, 复用 css
- 使用 微前端 技术,首屏仅加载当前子应用页面,可以做到只加载整站很少的一部分代码
- 首屏非必要依赖尽量延后到 FMP 或者 TTI 之后再加载
- 组件微前端化
- 渲染方向
- 尽量减少重排重绘
- 减少重复渲染(useMemo、useCallback、memo 等)
- 减少 setState 次数(多次 setState 可以合并为一次)
- 尽量减少 dom 节点深度
- 网络方向
- 使用流式服务端渲染, 可以查看文档:juejin.cn/post/695381…
- 使用服务端渲染, 减少首屏请求
- 使用 SSG 静态站点生成
- 首屏必要数据, 不作客户端请求, 用后端模板注入
- 使用 BFF 进行请求聚合
- 使用 CDN 进行网络请求分发
- DNS Prefetch
- 资源预加载(在闲暇时间加载后续页面所需要的资源和接口,例如:link rel preload)
- 启用 HTTP2 多路复用
- 在业务逻辑上, 首屏必要接口提前(例如在 html 加载的那一瞬间,利用一个非常小的 js 文件将首屏需要的请求发送出去, 然后缓存下来, 到业务使用的时候直接就使用即可)
- 使用缓存技术缓存资源与请求:强缓存、协商缓存、离线缓存、Service Worker 缓存、后端业务缓存
运行时卡顿方向
- 查看是否存在有有 long tasks, 有计划的拆解 long tasks
- 解决项目中复杂度问题: www.jianshu.com/p/ffbb25380…
- 排查项目是否有内存泄露
- 排查特定业务流程是否有慢接口
- 高复杂计算逻辑放在 service worker 处理
参考文档
- https://juejin.cn/post/7096144248713510943
- https://juejin.cn/post/6882936217609732110
- https://juejin.cn/post/7119074496610304031
- https://juejin.cn/post/7159807927908302884
猜你喜欢
- 2025-01-02 前后端数据交互(六)——ajax 、fetch 和 axios 优缺点及比较
- 2025-01-02 前端报504错误如何定位
- 2025-01-02 测试提了个bug,为什么你多了个options请求?
- 2025-01-02 Vue短文:如何在HTTP请求时传递自定义头部
- 2025-01-02 前端小伙伴,axios 是如何封装 HTTP 请求的?(看完会了吗)
- 2025-01-02 SpringMVC实现原理之DispatcherServlet处理请求的过程
- 2025-01-02 Background Sync出世!前端离线请求火起来?
- 2025-01-02 最简单的 6 种防止数据重复提交的方法!(干货)
- 2025-01-02 跨站请求伪造(CSRF)攻击是什么?如何防御?
- 2025-01-02 大批量接口请求的前端优化
你 发表评论:
欢迎- 577℃几个Oracle空值处理函数 oracle处理null值的函数
- 573℃Oracle分析函数之Lag和Lead()使用
- 559℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 558℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 554℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 543℃【数据统计分析】详解Oracle分组函数之CUBE
- 531℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 527℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)