当前位置: 首页 > news >正文

前端相关性能优化笔记

1.打开速度怎么变快 - 首屏加载优化

2.再次打开速度怎么变快 - 缓存优化了

3.操作怎么才顺滑 - 渲染优化

4.动画怎么保证流畅 - 长任务拆分


2.1 首屏加载指标细化:


1.FP(First Paint 首次绘制)
2.FCP(First contentful Paint 首次内容绘制),FP 到 FCP 中间其实主要是 SPA 应用JS执行,太慢就会白屏时间太长
3.FMP(Frist Meaningful Paint 首次有效绘制),主要内容呈现的时间
4.LCP(Largest Contentful Paint 最大内容渲染),加载最大内容块呈现时间

5.INP(Interaction to Next Paint) 与下一帧绘制的交互
6.TTI 可交互时间,SSR
7.TBT(Total Blocking Time 阻塞时间从 FCP 到 TTI):总阻塞时间

8.CLS(Cumulative Layout Shift 布局偏移):布局偏移情况,重排 reflow

9.TTFB(Time to First Byte):首字节到达时间,请求发出后到接收到数据中间的时间


2.2 方案:

1.优化图片,Webp,图片压缩,图片尺寸(在合适的容器内用合适的尺寸图片 1倍2倍3倍图);

2.字体瘦身,设计型产品,字体子集化(用了哪些字,就最后只生成对应字的字体文件),Fontmin;

3.懒加载资源,图片懒加载、JS 异步加载;

4.css、JavaScript 文件压缩,打包构建阶段完成(terser)

  • 代码压缩
  • 文件合并
  • 文件拆分
  • Tree shaking
  • 动态加载

5. Gzip、Brotli

6.SSR、SSG


3.1 动画卡顿: 

为什么会卡顿?单线程 阻塞 

3.2 方案:  

1.减少主线程阻塞
优化 JavaScript 执行,较少长任务(复杂的计算【web worker、将任务切分(react ScheduLer)】) 

2.GPU

  • css 属性(transform、opacity)
  • 避免会引起重排的属性(定位 left、top)

3.requestAnimationFrame;

4.节流防抖 

 

4.1 应用层状态优化:


1.减少全局状态的依赖

  • 将状态尽可能局部化,避免使用全局状态(Redux或Context)管理所有数据。
  • 如示例:对于仅用于某些组件的状态,可以使用组件的 useState 或useReducer。

2.优化 Context 的性能

  • Context 的更新会重新渲染所有订阅的组件
  • 解决方案:拆分:Context,将不同的逻辑存储在多个 Context 中,降低重新渲染范围。

3.使用高效的状态管理库

  • 使用轻量、高性能的状态管理工具,如Zustand、Jotai 或 Recoil,它们具备更细粒度的状态更新机制。

4.避免不必要的状态更新 

 

 

http://www.dtcms.com/a/267650.html

相关文章:

  • TEXT Complete Search
  • 【RK3568 编译rtl8723DU驱动】
  • Write-up:hacker_dns
  • 安达发|告别低效排产:APS高级排程如何助力电池企业智造升级?
  • Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备能耗实时监测与节能优化中的应用(332)
  • 09_云原生架构:拥抱不确定性
  • 【力扣 简单 C】746. 使用最小花费爬楼梯
  • AI小智项目全解析:软硬件架构与开发环境配置
  • 自动化Prompt生成平台的研发体系设计
  • [HDLBits] Cs450/history shift
  • vue router 里push方法重写为什么要重绑定this
  • Xmind功能特点
  • LucidShape 2024.09 最新
  • 2025年3月青少年电子学会等级考试 中小学生python编程等级考试三级真题答案解析(判断题)
  • Docker文件操作、数据卷、挂载
  • Servlet学习
  • FFmpeg——基础知识及FFmpeg框架
  • MySQL GROUP_CONCAT函数实现列转行
  • 技术管理核心知识体系:从架构到实践的全方位指南
  • DPDK 网卡驱动
  • 堆叠初始化与配置同步工作机制(以IRF2.0为例)
  • Adobe LiveCycle Designer 中脚本的层级关系
  • 许船长,不断推出契合潮流的创新品类
  • 如何解决Spring Boot中@Valid对List校验失效问题
  • 【Oracle专栏】大批量插入数据 BULK COLLECT
  • 【leetcode100】最长回文子串
  • Altium Designer使用教程 第二章(原理图绘制)
  • 嵌入式 数据结构学习(四) 双向链表详解与工程管理
  • 3dmax标准材质转物理材质插件,支持VR材质和CR材质转换成功物理材质,支持多维子材质
  • vscode工具使用技巧