iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >stats.js使用性能监控源码解读
  • 489
分享到

stats.js使用性能监控源码解读

stats.js性能监控stats.js源码解读 2023-05-18 08:05:07 489人浏览 八月长安
摘要

目录1.性能监控2.fps 计算3.ms 每个渲染帧运行需要多少毫秒4.memory 内存占用5.画 canvas 的板面6.创建 Stats 板面7.使用 Stats总结1.性能监

1.性能监控

GitHub 地址:https://github.com/mrdoob/stats.js/blob/master/src/Stats.js

  • FPS 在最近一秒渲染的帧数量。数值越高,性能越好.
  • MS 渲染帧所需的毫秒数。数值越低,性能越好.
  • MB 占用的内存大小. (Chrome 浏览器快捷键后面添加--enable-precise-memory-info 命令)

2.fps 计算

var fps = 0;
var prevTime = (perfORMance || Date).now(),
  frames = 0;
function aaa() {
  frames++;
  var time = (performance || Date).now();
  //每秒计算一次渲染帧数量
  if (time >= prevTime + 1000) {
    fps = (frames * 1000) / (time - prevTime);
    console.log(fps);
    prevTime = time;
    frames = 0;
  }
  window.requestAnimationFrame(aaa);
}
aaa();

3.ms 每个渲染帧运行需要多少毫秒

let ms = 0;
var beginTime = (performance || Date).now();
function bbb() {
  //当前时间减去开始时间
  ms = (performance || Date).now() - beginTime;
  console.log(ms);
  window.requestAnimationFrame(bbb);
  beginTime = (performance || Date).now();
}
bbb();

4.memory 内存占用

usedJSHeapSize已经使用的内存

jsHeapSizeLimit内存大小限制

let mb = 0,
  mbPercent = 0;
let prevTime = (performance || Date).now();
function ccc() {
  var time = (performance || Date).now();
  //每秒获取一次
  if (time >= prevTime + 1000) {
    //获取性能里的内存相关参数,前提是performance.memory存在
    var memory = performance.memory;
    //1M =1048576=2^20
    //使用了多少内存
    mb = memory.usedJSHeapSize / 1048576;
    //内存占用百分比
    mbPercent = memory.usedJSHeapSize / memory.jsHeapSizeLimit;
    console.log(mb, mbPercent);
  }
  window.requestAnimationFrame(ccc);
}
ccc();

5.画 Canvas 的板面

创建 canvas

//name性能名称, fg颜色, bg背景
Stats.Panel = function (name, fg, bg) {
  var min = Infinity,
    max = 0,
    round = Math.round;
  var PR = round(window.devicePixelRatio || 1);
  var WIDTH = 80 * PR, //canvas板面宽度
    HEIGHT = 48 * PR, //canvas板面高度
    TEXT_X = 3 * PR, //文本x坐标
    TEXT_Y = 2 * PR, //文本y坐标
    GRAPH_X = 3 * PR, //图表x坐标
    GRAPH_Y = 15 * PR, //图表y坐标
    GRAPH_WIDTH = 74 * PR, //图表宽度
    GRAPH_HEIGHT = 30 * PR; //图表高度
  //创建canvas
  var canvas = document.createElement('canvas');
  canvas.width = WIDTH;
  canvas.height = HEIGHT;
  canvas.style.CSSText = 'width:80px;height:48px';
  var context = canvas.getContext('2d');
  //设置字体样式
  context.font = 'bold ' + 9 * PR + 'px Helvetica,Arial,sans-serif';
  context.textBaseline = 'top';
};

板面更新数值


update:function (value, maxValue) {
//监控过程中,最小最大值范围
      min = Math.min(min, value);
      max = Math.max(max, value);
      context.fillStyle = bg;
      context.globalAlpha = 1;
      //清空内容重绘
      context.fillRect(0, 0, WIDTH, GRAPH_Y);
      context.fillStyle = fg;
      //画文本,当前数值,name,最小最大值
      context.fillText(
        round(value) + ' ' + name + ' (' + round(min) + '-' + round(max) + ')',
        TEXT_X,
        TEXT_Y
      );
    //截取canvas之前的内容范围,往前移动,覆盖内容
      context.drawImage(
        canvas,
        GRAPH_X + PR,
        GRAPH_Y,
        GRAPH_WIDTH - PR,
        GRAPH_HEIGHT,
        GRAPH_X,
        GRAPH_Y,
        GRAPH_WIDTH - PR,
        GRAPH_HEIGHT
      );
    //清空最后的那部分
      context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT);
      context.fillStyle = bg;
      context.globalAlpha = 0.9;
      //画出最新的数值矩形
      context.fillRect(
        GRAPH_X + GRAPH_WIDTH - PR,
        GRAPH_Y,
        PR,
        round((1 - value / maxValue) * GRAPH_HEIGHT)
      );
    }

6.创建 Stats 板面

var mode = 0;
var container = document.createElement('div');
container.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';
//点击切换板面模式
container.addEventListener(
  'click',
  function (event) {
    event.preventDefault();
    showPanel(++mode % container.children.length);
  },
  false
);
//添加canvas板面
function addPanel(panel) {
  container.appendChild(panel.dom);
  return panel;
}
//显示对应的板面模式
function showPanel(id) {
  for (var i = 0; i < container.children.length; i++) {
    container.children[i].style.display = i === id ? 'block' : 'none';
  }
  mode = id;

添加三种 canvas 板面

//添加索引为0的fps板面
var fpsPanel = addPanel(new Stats.Panel('FPS', '#0ff', '#002'));
//添加索引为1的ms板面
var msPanel = addPanel(new Stats.Panel('MS', '#0f0', '#020'));
//如果performance.memory存在,添加索引为2的内存板面
if (self.performance && self.performance.memory) {
  var memPanel = addPanel(new Stats.Panel('MB', '#f08', '#201'));
}
//默认显示fps
showPanel(0);

每个板面数值的更新

  var beginTime = (performance || Date).now(),
    prevTime = beginTime,
    frames = 0;
//开始时间
begin: function () {
      beginTime = (performance || Date).now();
    },
//计算
    end: function () {
      frames++;
      var time = (performance || Date).now();
    //ms板面的数值
      msPanel.update(time - beginTime, 200);
      if (time >= prevTime + 1000) {
        //fps板面数值
        fpsPanel.update((frames * 1000) / (time - prevTime), 100);
        prevTime = time;
        frames = 0;
        //内存板面数值更新
        if (memPanel) {
          var memory = performance.memory;
          //1M =1048576=2^20
          memPanel.update(memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576);
        }
      }
      return time;
    },
//更新
    update: function () {
      beginTime = this.end();
    },

7.使用 Stats

var stats = new Stats();
document.body.appendChild(stats.dom);
function animate() {
  stats.update();
  window.requestAnimationFrame(animate);
}
animate();

总结

Stats 真的很小巧实用,不用打开开发者中心,就可以用于监控界面性能,比如可视化大屏或者一些复杂界面的性能,点开某个功能,猛地飙升内存,关闭没有降下来,那有可能内存泄露,给你优化渲染提供参考!

以上就是stats.js源码解读的详细内容,更多关于stats.js源码解读的资料请关注编程网其它相关文章!

--结束END--

本文标题: stats.js使用性能监控源码解读

本文链接: https://www.lsjlt.com/news/211824.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • stats.js使用性能监控源码解读
    目录1.性能监控2.fps 计算3.ms 每个渲染帧运行需要多少毫秒4.memory 内存占用5.画 Canvas 的板面6.创建 Stats 板面7.使用 Stats总结1.性能监...
    99+
    2023-05-18
    stats.js 性能监控 stats.js源码解读
  • 操作系统性能监控:指标解读指南
    操作系统是计算机系统中管理资源和提供服务的核心组件。监控操作系统的性能至关重要,以便确保系统正常运行并及时发现和解决问题。以下指南提供了关键操作系统性能指标及其解释的深入分析。 CPU利用率 CPU利用率衡量中央处理单位(CPU)执行任...
    99+
    2024-03-02
    操作系统监控、系统指标、性能分析、故障排除
  • 从Kafka Monitor源码解读看如何做好黑盒监控
    这篇文章给大家介绍从Kafka Monitor源码解读看如何做好黑盒监控,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先带来的是“监控”专题系列。众所周知,监控分为黑盒和白盒监控,黑盒监控是通过模拟外部用户对其可见的...
    99+
    2023-06-05
  • JavaMetrics系统性能监控工具的使用详解
    目录前言Metric Registries Metrics 数据展示 Metrics的五种类型GaugesCountersMetersHistogramsTime...
    99+
    2022-11-13
    Java Metrics系统性能监控 Java Metrics 性能监控 Java Metrics
  • 使用Grafana+Prometheus监控mysql服务性能
    Prometheus(也叫普罗米修斯)官网:https://prometheus.io/docs/introduction/overview/ Grafana官网:https://grafana.com/e...
    99+
    2024-04-02
  • 怎么使用Performance监控前端性能
    这篇文章主要介绍“怎么使用Performance监控前端性能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Performance监控前端性能”文章能帮助大家解决问题。Performance....
    99+
    2023-06-17
  • 怎么使用jmeter监控服务器性能
    要使用JMeter监控服务器性能,可以按照以下步骤操作: 下载和安装JMeter软件,并打开JMeter界面。 添加一个线程...
    99+
    2024-05-08
    jmeter
  • Ubuntu中如何监控系统性能和资源利用率
    在Ubuntu中,可以使用以下工具来监控系统性能和资源利用率: top命令:top是一个命令行工具,可以实时显示系统中运行的进程...
    99+
    2024-04-02
  • MongoDB数据库性能监控详解
    目录一、MongoDB启动超慢1、启动日常卡住,根本不用为了截屏而快速操作,MongoDB启动真的超级慢~~2、启动MongoDB配置服务器,间歇性失败。3、查看MongoDB日志,分析“MongoDB启动慢...
    99+
    2023-03-31
    MongoDB数据库 数据库性能监控
  • 如何进行C++代码的性能监控?
    如何进行C++代码的性能监控?简介:在软件开发中,性能是一个非常重要的指标。对于C++开发者来说,监控代码的性能可以帮助他们发现潜在的性能问题,并进行优化以提高程序的效率。本文将介绍一些常用的C++性能监控工具和技术,帮助开发者更好地监控和...
    99+
    2023-11-04
    代码 C++ 性能监控
  • 如何使用linux系统性能监控工具KSysguard监控远端主机
    小编给大家分享一下如何使用linux系统性能监控工具KSysguard监控远端主机,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!KDE System Guard默...
    99+
    2023-06-13
  • JVM性能调优监控工具如何使用
    这篇文章主要讲解了“JVM性能调优监控工具如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM性能调优监控工具如何使用”吧!   现实企业级Jav...
    99+
    2024-04-02
  • 【JVM 监控工具】性能诊断--JProfiler的使用
    文章目录 背景一、Java 性能诊断工具简介二、简单命令行工具三、图形化综合诊断工具JVisualvmJProfilerJConsole 四、分布式应用性能诊断五、IDEA中设置JProf...
    99+
    2023-09-03
    jvm java 开发语言
  • 如何使用MySQL MHA源代码进行监控检查
    本篇文章给大家分享的是有关如何使用MySQL MHA源代码进行监控检查,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看...
    99+
    2024-04-02
  • Spring MVC Interceptor 实现性能监控的功能代码
    利用Spring MVC 的 Interceptor 实现个简易的性能监控,计算一下每个url的执行时间。在 preHandle 方法中记录当前的时间戳到线程局部变量里,然后在afterCompletion方法中,用当前的时间戳剪掉线程局部...
    99+
    2023-05-31
    spring mvc 性能监控
  • 如何使用Netdata监控云服务的性能和可用性
    要使用Netdata监控云服务的性能和可用性,可以按照以下步骤进行操作: 安装Netdata:首先,在云服务上安装Netdata...
    99+
    2024-04-24
    Netdata
  • web项目中golang性能监控解析
    目录性能监控一、web项目(如gin中)二、单个的go文件如果查看gc性能监控 一、web项目(如gin中) 1.使用ginpprof import "github.com/Dean...
    99+
    2024-04-02
  • 如何理解Redis性能指标监控
    这篇文章主要讲解了“如何理解Redis性能指标监控”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Redis性能指标监控”吧! 监控指标性能...
    99+
    2024-04-02
  • mysql5.6性能监控表innodb_metrics的用法
    这篇文章主要介绍“mysql5.6性能监控表innodb_metrics的用法”,在日常操作中,相信很多人在mysql5.6性能监控表innodb_metrics的用法问题上存在疑惑,小编查阅了各式资料,整...
    99+
    2024-04-02
  • 如何在Linux中使用Smartctl监控磁盘性能
    本篇内容主要讲解“如何在Linux中使用Smartctl监控磁盘性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在Linux中使用Smartctl监控磁盘性能”吧!Smartctl(S.M...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作