0

0

HTML如何计算页面FPS_性能监测实现方法【技巧】

看不見的法師

看不見的法師

发布时间:2025-12-17 11:55:02

|

472人浏览过

|

来源于php中文网

原创

可通过五种方法实时监测网页FPS:一、requestAnimationFrame计算帧间隔;二、PerformanceObserver监听paint事件;三、chrome://tracing离线分析;四、performance.getEntriesByType('frame')获取帧信息;五、Canvas合成帧检测。

html如何计算页面fps_性能监测实现方法【技巧】

如果您需要实时监测网页在浏览器中的渲染帧率,以评估动画流畅度或识别性能瓶颈,则可以通过JavaScript结合浏览器提供的API来获取当前页面的FPS值。以下是实现此功能的多种方法:

一、使用requestAnimationFrame计算帧间隔

该方法基于requestAnimationFrame的回调机制,通过记录连续两帧之间的时间差,反向推算出每秒渲染帧数。其原理是requestAnimationFrame会在浏览器下一次重绘前执行回调,时间精度高且与刷新率同步。

1、定义一个全局变量lastTime用于存储上一帧的时间戳,初始值设为0。

2、定义一个frameCount变量用于累计当前秒内触发的帧数,初始值设为0。

立即学习前端免费学习笔记(深入)”;

3、定义一个startTime变量记录当前计时周期起始时间,初始值为performance.now()。

4、编写一个循环函数,在其中调用requestAnimationFrame,并在回调中获取当前时间戳now。

5、计算当前帧与上一帧的时间差interval = now - lastTime,若interval大于0则累加frameCount。

6、当now - startTime >= 1000时,将frameCount作为当前FPS值输出,并重置frameCount为0、startTime为now。

7、更新lastTime = now,然后再次调用该循环函数。

二、利用PerformanceObserver监听paint事件

该方法依赖PerformanceObserver API监听paint条目,从中提取FP(First Paint)和FCP(First Contentful Paint)等指标,并通过统计单位时间内paint事件数量估算FPS。适用于关注页面首次渲染质量的场景。

1、创建一个新的PerformanceObserver实例,传入回调函数,观察类型设置为'paint'。

2、在回调函数中,遍历entries参数获取所有paint性能条目。

3、筛选出entryType为'paint'且name为'first-paint'或'first-contentful-paint'的条目。

4、维护一个时间窗口数组,仅保留过去1秒内发生的paint事件时间戳。

5、每次新增paint时间戳后,移除早于当前时间减1000毫秒的所有旧时间戳。

6、数组长度即为近1秒内的paint事件数,可作为粗略FPS参考值。

三、读取chrome://tracing导出的trace数据进行离线分析

该方法不适用于运行时监测,但可用于深度性能诊断。通过手动录制页面交互过程的trace文件,解析其中Category为"rendering"的FrameStart和FrameEnd事件,精确统计每秒完成的完整帧数。

1、在Chrome地址栏输入chrome://tracing,点击“Record”按钮。

2、勾选“Rendering”、“Layout”、“Paint”、“Composite”等与渲染相关选项。

科大讯飞-AI虚拟主播
科大讯飞-AI虚拟主播

科大讯飞推出的移动互联网智能交互平台,为开发者免费提供:涵盖语音能力增强型SDK,一站式人机智能语音交互解决方案,专业全面的移动应用分析;

下载

3、开始录制后执行目标操作,完成后点击“Stop”并保存trace.json文件。

4、使用脚本读取trace.json,过滤出ph字段为"B"且cat包含"rendering"且name为"FrameStart"的事件。

5、匹配对应ph为"E"且name为"FrameEnd"的事件,确保ts与dur字段构成完整帧周期。

6、按时间戳分组,统计每1000ms区间内有效帧的数量,得出各时段FPS分布。

四、使用window.performance.getEntriesByType获取帧信息

部分新版Chrome支持通过performance.getEntriesByType('frame')获取帧性能条目,每个条目包含duration字段,表示该帧持续时间,据此可计算瞬时FPS。

1、检查浏览器是否支持frame类型的performance entry:if ('getEntriesByType' in performance && performance.getEntriesByType('frame').length > 0)

2、调用performance.getEntriesByType('frame')获取最近若干帧数据。

3、取数组末尾至少两个条目,确保它们具有连续的frame ID。

4、计算duration平均值avgDuration = (entry1.duration + entry2.duration) / 2。

5、瞬时FPS = Math.round(1000 / avgDuration)。

6、注意该API返回条目数量有限,需定期清理并重新采集。

五、注入自定义Canvas合成帧检测逻辑

该方法适用于WebGL或复杂Canvas动画场景,通过在每一帧绘制结束时插入标记时间点,再结合定时器采样,实现对实际合成帧率的观测。

1、在Canvas渲染主循环末尾添加performance.now()打点,并存入一个固定长度为60的数组。

2、启动一个setInterval,间隔1000ms执行一次FPS计算逻辑。

3、从数组中取出最近一次写入位置向前推60个元素(若存在),计算首尾时间差。

4、若时间差大于0,则FPS = Math.round(60000 / 时间差)。

5、将结果写入页面浮动面板或console输出,确保该面板不参与Canvas重绘以免干扰测量

6、每次采样后清空数组或滚动覆盖旧值,保持内存占用稳定。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

427

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

541

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

313

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

78

2025.09.10

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

888

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

764

2023.11.06

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

794

2023.08.22

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

82

2025.09.18

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

4

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.7万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号