一起来了解前端性能优化(FPS)

什么是 fps fps原理 requestAnimationFrame fps的场景 fps的使用 总结

前言

现在的项目越来越复杂,功能也越多,这种情况下会导致项目有着各方面的性能问题,像页面加载缓慢、请求访问时间长、页面卡顿等问题。

这个时候我们就需要考虑进行性能优化,性能优化有很多方面,像 FPS 就是其中一种。

什么是 FPS

在我们打游戏的时候会在画面顶端有显示着 60 FPS 等文字,然后现在的手机宣传会说有多少高刷,观看视频、打游戏流畅度非常高,体验感好。目前大多数设备的屏幕刷新率为 60 次/秒,有些高端手机甚至更高,达到120。

FPS 指的是画面每秒传输帧数,即在每秒内能够渲染多少帧画面。通常情况下,FPS 越高,页面的流畅度就越好。FPS 也可以理解为刷新率(Hz),高刷可以提高我们观看图像显示流畅度。

Performance

在浏览器中我们可以 F12 打开控制台,然后ctrl+shift+p就会出现下面的窗口,然后输入 FPS。

然后页面就会出现该检测块,右上角就是当前 FPS。当页面变化、滑动一次就会显示当时的 FPS 大小。

控制台除了可以观看 FPS ,还可以观看页面运行的其它情况。也是 F12 打开控制台,点击 Performance 进行录制运行时的性能记录。

这里观看的是 CPU 的占用情况,鼠标滑入可以看到页面各个阶段的画面快照。

  • 黄色(Scripting):js脚本的执行

  • 紫色(Rendering):样式计算和布局,页面重排

  • 绿色(Painting):重绘的时间

  • 灰色(other):其它事件花费的时间

  • 白色(Idle):空闲时间

  • 顶部红条:FPS帧率,红色代表这一帧的页面在刷新停顿相对比较久,绿色表示良好

requestAnimationFrame

requestAnimationFrame(请求动画帧) 是 HTML5 新增的 API,主要用于在浏览器的下一次重绘之前调用指定的回调函数。该方法可以自动根据浏览器的性能情况控制动画的刷新频率,从而达到 60 FPS 的渲染速度,如果系统绘制率是 60Hz,那么回调函数就会 16.7ms 再 被执行一次。

requestAnimationFrame 通常用作动画的执行,从动画的流畅度从而反映 FPS 值。

js 复制代码
let block: HTMLDivElement
let x = 0;
let speed = 5;
let rafId: any = null
onMounted(() => {
  block = document.querySelector('.block') as HTMLDivElement;
})
// 动画函数
const animationFun = ()=> {
  x += speed;
  if (x > window.innerWidth - block.clientWidth || x < 0) speed = -speed;
  block.style.left = x + 'px';
  // 传入函数循环执行
  rafId = window.requestAnimationFrame(animationFun);
}
// 停止执行
const stopAnimationFun = ()=> {
 cancelAnimationFrame(rafId)
}

那么怎么停止 requestAnimationFrame 呢?HTML5 给我们提供了 cancelAnimationFrame 函数,当我们使用 requestAnimationFrame 时会默认返回一个id,cancelAnimationFrame 只需要传入这个 id 就可以停止了。

js 复制代码
function animationFun() {}
let rafId = requestAnimationFrame(animationFun)
cancelAnimationFrame(rafId)
相关推荐
hoLzwEge4 小时前
拯救低效调试!code-inspector-plugin 让代码定位如虎添翼
前端·前端框架·node.js
J船长4 小时前
烂笔头扫盲:LLM Eval 入门:从「感觉挺好」到「数据说话」的工程化落地
前端
skiyee4 小时前
被多个 UView 系 UI 库 “抄” 的 @uni-ku/root 究竟怎么实现?
前端
鱼毓屿御4 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
sugar__salt5 小时前
Vue3 表单双向绑定与响应式核心 API 技术详解
前端·javascript·vue.js
郝亚军5 小时前
使用Vue 3和Nginx打包和部署Vue.js项目的一般步骤
前端·vue.js·nginx
SmartBoyW5 小时前
CSS弹性布局(Flexbox)学习笔记:从零开始搞懂弹性布局
前端·javascript
用户69371750013845 小时前
从代码生产者到 AI 协作者:软件工程师的角色重构
android·前端·后端
嘟嘟07175 小时前
搞懂 useState 从原生 DOM 到 React 惰性初始化的完整链路
前端·react.js·编程语言
牧艺5 小时前
cos-design RippleWater & SmokeFog:水面涟漪与烟雾雾气怎么做
前端·canvas·视觉设计