1、动画性能基础:理解帧率(FPS)与刷新率(Hz)的关系

做前端动画优化这么多年,我见过太多人把「卡顿」归咎于代码写得烂。其实很多时候,问题出在没搞懂最基础的两个概念——帧率和刷新率。今天咱们就把这事彻底说清楚。

1.1 帧率(FPS)是什么?

FPS,全称 Frames Per Second,每秒传输帧数。说白了,就是你的动画每一秒能画出多少张画面。

举个例子:
一部电影是 24fps,意思是每秒闪过 24 张静态图。
一个游戏跑 60fps,就是每秒更新 60 次画面。

帧率越高,动画看起来就越流畅。但这里有个关键问题——帧率不是越高越好,而是越稳定越好。

核心观点:60fps 之所以成为黄金标准,不是因为人眼只能看到 60 帧,而是因为 60fps 与大多数显示器的刷新率完美匹配,能带来「丝滑」的视觉体验。

1.2 刷新率(Hz)又是什么?

刷新率是显示器的事。它表示屏幕每秒钟能刷新多少次画面。常见的显示器有 60Hz、120Hz、144Hz。

我打个比方你就懂了:
帧率是「画家画画的快慢」,刷新率是「画框换画的快慢」。
画家画得再快,画框换得慢,你也看不到新画。

概念 主体 含义 常见值
帧率 (FPS) 浏览器/应用 每秒生成多少帧画面 30、60、120
刷新率 (Hz) 显示器 每秒刷新多少次屏幕 60、120、144

1.3 帧率与刷新率的匹配关系

这两者必须匹配,否则就会出现视觉问题。

  • 帧率 > 刷新率:多余的帧会被丢弃,造成画面撕裂(tearing)。
  • 帧率 < 刷新率:显示器会重复显示上一帧,造成卡顿感(jank)。
  • 帧率 = 刷新率:完美匹配,每一帧都能被及时显示。

我在项目中遇到过最典型的案例:一个 H5 游戏在 60Hz 显示器上跑 120fps,结果用户反馈画面撕裂。后来加了垂直同步(V-Sync),把帧率锁定在 60fps,问题就解决了。

避坑指南:我曾经在优化一个长列表滚动动画时,发现帧率稳定在 55-58fps,但用户还是觉得「有点卡」。后来排查发现,显示器是 60Hz,帧率波动导致部分帧被重复显示。解决方案不是提升帧率,而是让帧率更稳定。

1.4 为什么 60fps 是黄金标准?

原因有三:

  1. 硬件普及率:绝大多数显示器和手机屏幕都是 60Hz,60fps 刚好匹配。
  2. 人眼感知阈值:大部分人能明显感知到 30fps 以下的卡顿,但 60fps 以上再提升,感知差异就很小了。
  3. 性能成本:从 30fps 提升到 60fps,性能开销翻倍;从 60fps 提升到 120fps,开销再翻倍。但收益递减。

我的建议:做动画优化时,先确保稳定达到 60fps,再考虑更高帧率。不要为了跑 120fps 而牺牲稳定性,那得不偿失。

1.5 人眼视觉暂留效应

这个效应是动画能「动起来」的生理基础。简单说:人眼看到一幅画面后,图像会在视网膜上停留约 1/24 秒。

所以当连续画面以足够快的速度切换时,大脑会把它们「脑补」成连续运动。这就是为什么电影用 24fps 就能让你觉得画面是流畅的。

但注意:视觉暂留效应只能解释「为什么能感知到运动」,不能解释「为什么 60fps 比 30fps 更流畅」。后者涉及的是人眼对运动模糊和闪烁的敏感度。

我记得刚入行时,有个同事非说「人眼只能看到 30fps,做 60fps 是浪费」。后来我让他盯着 30fps 和 60fps 的滚动页面对比,他自己就改口了。你想想看,要是人眼只能看到 30fps,那 144Hz 的显示器卖给谁?

1.6 知识体系总览

下面这张图把本章的核心逻辑串起来了,建议你多看几遍。

动画性能基础:帧率与刷新率关系图 帧率 (FPS) 浏览器每秒生成帧数 刷新率 (Hz) 显示器每秒刷新次数 匹配关系 FPS > Hz 画面撕裂 FPS = Hz 完美流畅 FPS < Hz 卡顿感 人眼视觉暂留效应 约 1/24 秒,是动画感知的生理基础

1.7 小结

这一章咱们把最基础的东西理清了:

  • 帧率是浏览器的事,刷新率是显示器的事。
  • 两者必须匹配,否则就会出现撕裂或卡顿。
  • 60fps 是黄金标准,因为硬件普及、人眼感知、性能成本三者平衡。
  • 视觉暂留效应是动画能「动起来」的生理基础,但不是流畅度的决定因素。