一段简单的显示当前页面FPS的代码
写前端代码,尤其是做一个前端框架的时候,经常需要及时知道代码的大致性能,这时候如果能有个好的办法能一直看到当前页面的fps就好了。
整体思路是一秒有一千毫秒,先记录当前时间作为最后一次记录fps的时间,通过 requestAnimationFrame 回调不断给累加fsp计数器,并且判断上次记录fps的时间是否达到1000毫秒以上,如果满足条件,就将fps累加器的值作为当前fps显示,并且重置fps累加器。
这里写了段比较简单的显示FPS的代码:
1 var showFPS = (function () { 2 // noinspection JSUnresolvedVariable, SpellCheckingInspection 3 var requestAnimationFrame = 4 window.requestAnimationFrame || //Chromium 5 window.webkitRequestAnimationFrame || //Webkit 6 window.mozRequestAnimationFrame || //Mozilla Geko 7 window.oRequestAnimationFrame || //Opera Presto 8 window.msRequestAnimationFrame || //IE Trident? 9 function (callback) { //Fallback function 10 window.setTimeout(callback, 1000 / 60); 11 }; 12 13 var dialog; 14 var container; 15 16 var fps = 0; 17 var lastTime = Date.now(); 18 19 function setStyle(el, styles) { 20 for (var key in styles) { 21 el.style[key] = styles[key]; 22 } 23 } 24 25 function init() { 26 dialog = document.createElement('dialog'); 27 setStyle(dialog, { 28 display: 'block', 29 border: 'none', 30 backgroundColor: 'rgba(0, 0, 0, 0.6)', 31 margin: 0, 32 padding: '4px', 33 position: 'fixed', 34 top: 0, 35 right: 'auto,', 36 bottom: 'auto', 37 left: 0, 38 color: '#fff', 39 fontSize: '12px', 40 textAlign: 'center', 41 borderRadius: '0 0 4px 0' 42 }); 43 container.appendChild(dialog); 44 } 45 46 function calcFPS() { 47 offset = Date.now() - lastTime; 48 fps += 1; 49 50 if (offset >= 1000) { 51 lastTime += offset; 52 displayFPS(fps); 53 fps = 0; 54 } 55 56 requestAnimationFrame(calcFPS); 57 }; 58 59 function displayFPS(fps) { 60 var fpsStr = fps + ' FPS'; 61 62 if (!dialog) { 63 init(); 64 } 65 66 if (fpsStr !== dialog.textContent) { 67 dialog.textContent = fpsStr; 68 } 69 } 70 71 return function (parent) { 72 container = parent; 73 calcFPS(); 74 }; 75 })(); 76 77 showFPS(document.body);
分类:
Javascript
标签:
Javascript
, 工具代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)