JavaScript获取当前cpu使用率的方法

yizhihongxing

获取当前CPU使用率可以通过编写JavaScript代码调用操作系统API来实现。不过需要注意的是,由于JavaScript的运行环境通常是浏览器中,所以获取CPU使用率的能力对不同浏览器有一定的差异,下面我将介绍两种获取CPU使用率的方法:

方法一:基于Performance API

Performance API 是浏览器内置的一个性能指标 API,可以用它来获取页面的一些性能信息,其中就包括当前页面的 CPU 使用率。

例如,可以通过 performance.measure 方法来记录两个时间之间的性能数据,并通过相除计算两个时间之间的 CPU 使用率。下面是一个计算 CPU 使用率的示例代码:

const startTime = performance.now();
let startCPUUsage, endCPUUsage;

setTimeout(() => {
  performance.measure('Start Performance', 'Start Performance');

  // 兼容不同的浏览器
  if (performance.getEntriesByName && performance.getEntriesByName('Start Performance').length > 0) {
    startCPUUsage = performance.getEntriesByName('Start Performance')[0].entryType === 'navigation' ?
      performance.getEntriesByName('Start Performance')[1].serverTiming[0].description.split('=')[1] :
      performance.getEntriesByName('Start Performance')[0].serverTiming[0].description.split('=')[1];
  } else if (performance.webkitGetEntriesByName && performance.webkitGetEntriesByName('Start Performance').length > 0) {
    startCPUUsage = performance.webkitGetEntriesByName('Start Performance')[0].serverTiming[0].description.split('=')[1];
  }

  const endTime = performance.now();
  performance.measure('End Performance', 'Start Performance');

  // 兼容不同的浏览器
  if (performance.getEntriesByName && performance.getEntriesByName('End Performance').length > 0) {
    endCPUUsage = performance.getEntriesByName('End Performance')[0].entryType === 'navigation' ?
      performance.getEntriesByName('End Performance')[1].serverTiming[0].description.split('=')[1] :
      performance.getEntriesByName('End Performance')[0].serverTiming[0].description.split('=')[1];
  } else if (performance.webkitGetEntriesByName && performance.webkitGetEntriesByName('End Performance').length > 0) {
    endCPUUsage = performance.webkitGetEntriesByName('End Performance')[0].serverTiming[0].description.split('=')[1];
  }

  console.log(`CPU usage: ${(endCPUUsage - startCPUUsage) / (endTime - startTime) * 100}%`);
}, 1000);

代码的大致逻辑是:

  1. 先记录当前时间 startTime
  2. 等待一段时间(这里是 1000 毫秒),记录当前时间 endTime
  3. 使用 performance.measure 记录从 Start Performance 事件到 End Performance 事件之间的性能数据。
  4. 通过 performance.getEntriesByName 方法获取这段时间内的 CPU 使用率数据,然后计算 CPU 使用率并输出。

需要注意的是,由于 performance 对象的方法和属性在不同浏览器之间有些差异,所以上述代码逻辑中进行的是一些兼容性处理。另外,由于 performance.measureperformance.getEntriesByName 等方法均不是 CPU 使用率的标准获取途径,所以上述代码不能保证在所有情况下都能准确地获取 CPU 使用率。

方法二:使用 Web Worker

Web Worker 的作用是在独立于主线程之外的线程中执行 JavaScript 代码。在 Web Worker 中,我们可以通过 Performance API 获取当前线程的 CPU 使用率,进而获取系统整体的 CPU 使用率。

以下是一个 Web Worker 的示例代码:

// main.js
const worker = new Worker('worker.js');
worker.onmessage = (event) => {
  console.log(`System CPU usage: ${event.data.system}`);
  console.log(`Process CPU usage: ${event.data.process}`);
}

// worker.js
let lastSystemIdleTime = 0;
let lastSystemBusyTime = 0;
let lastThreadIdleTime = 0;
let lastThreadBusyTime = 0;

setInterval(() => {
  const now = performance.now();
  const threadTime = process.hrtime();
  const threadIdleTime = threadTime[0] * 1e9 + threadTime[1];
  const threadBusyTime = now * 1000 - threadIdleTime;
  const systemIdleTime = performance.now() * 1000 - threadIdleTime;
  const systemBusyTime = performance.now() * 1000 - threadBusyTime;

  const systemUsage = (systemBusyTime - lastSystemBusyTime) / (now - lastSystemIdleTime) * 100;
  const threadUsage = (threadBusyTime - lastThreadBusyTime) / (now - lastThreadIdleTime) * 100;

  postMessage({system: systemUsage, process: threadUsage});

  lastSystemIdleTime = now;
  lastSystemBusyTime = systemBusyTime;
  lastThreadIdleTime = threadIdleTime;
  lastThreadBusyTime = threadBusyTime;
}, 1000);

代码的大致逻辑是:

  1. main.js 中创建一个 Web Worker,并监听其消息事件。
  2. worker.js 中定时(这里是每 1000 毫秒)获取当前线程和系统的 CPU 使用情况,并计算 CPU 使用率。
  3. 将计算结果通过 postMessage 发送给主线程。

需要注意的是,该方法同样存在兼容性问题,且需要使用 Web Worker,无法在单线程中获取 CPU 使用率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript获取当前cpu使用率的方法 - Python技术站

(2)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript批量修改文件编码格式的方法

    下面是详细讲解”javascript批量修改文件编码格式的方法”的完整攻略。 1. 确定编码格式 在进行批量修改文件编码格式之前,首先要确定文件原始编码格式和目标编码格式。 常见的文件编码格式有UTF-8、GBK、GB2312、BIG5等。 2. 安装必要的工具 在进行文件编码格式转换之前,需要安装一些必要的工具。 iconv-lite:一个非常流行的Nod…

    JavaScript 2023年5月20日
    00
  • javascript Demo模态窗口

    下面是关于JavaScript Demo模态窗口的完整攻略: 简介 Demo模态窗口是一种常见的Web开发技术,用于在页面中显示交互式传达信息、获取用户反馈等操作。本文将详细介绍如何使用JavaScript实现Demo模态窗口。 实现方式一:使用HTML和CSS HTML部分 首先在页面中加入一块隐藏的HTML代码块,用于存放模态窗口的结构,例如: <…

    JavaScript 2023年6月10日
    00
  • 实现javascript的延期执行或者重复执行的两个函数

    实现 JavaScript 的延期执行或重复执行,常用两个函数:setTimeout 和 setInterval。以下是详细攻略: setTimeout setTimeout 函数可以延迟指定时间后执行一次函数。 该函数的第一个参数是要执行的函数或要执行的代码,第二个参数是需要延迟的时间,单位是毫秒。 setTimeout 函数返回一个 ID,我们可以通过该…

    JavaScript 2023年6月10日
    00
  • javascript常用经典算法实例详解

    JavaScript常用经典算法实例详解 JavaScript常用经典算法实例涵盖了排序、查找、字符串处理等多个算法类型。下面将对其中的两个示例进行详细说明。 示例一:冒泡排序算法 冒泡排序是一种常见的排序算法,其基本思想是不断比较相邻两个元素的大小,将较大的元素向后移动,最终实现数组的升序排列。 下面是一个使用JavaScript实现冒泡排序的示例代码: …

    JavaScript 2023年5月18日
    00
  • JavaScript实现烟花绽放动画效果

    下面就是JavaScript实现烟花绽放动画效果的完整攻略。 前置知识 在进行本教程之前,你需要掌握以下的前置知识: HTML、CSS基础 JavaScript基础语法 Canvas基础 如果你还不熟悉这些,可以先去学习一下。 实现思路 要实现烟花绽放动画效果,我们需要做以下的一些事情: 在页面中创建一个Canvas元素,用来绘制烟花图案。 监听鼠标点击事件…

    JavaScript 2023年6月10日
    00
  • 普通js文件里面如何访问vue实例this指针

    在普通js文件中,如果需要访问Vue实例的数据或者方法,需要通过Vue实例的引用来获取this指针。 一、通过Vue.createApp创建Vue实例 如果我们通过Vue.createApp创建Vue实例,我们可以使用provide和inject来将Vue实例注入到普通js文件中,使其能够访问Vue实例。具体步骤如下: 在Vue.createApp中使用pr…

    JavaScript 2023年6月11日
    00
  • gridview 行选添加颜色和事件

    下面是详细讲解“gridview 行选添加颜色和事件”的攻略: 1. 前置条件 在使用 GridView 行选添加颜色和事件之前确认以下条件: GridView 控件应该已经被正确地绑定到数据源。 GridView 控件应该已经在页面中被正确地声明,并且属性设置正确。 2. 行选添加颜色 要为 GridView 控件的行添加颜色,可以通过以下方式实现: 2.…

    JavaScript 2023年6月10日
    00
  • 跨域设置Cookie失效问题解决方案原理分析

    当我们通过AJAX等方式在前端向服务端发送请求时,如果请求的地址与前端页面所在的域名不同,就会触发跨域问题。跨域问题是由浏览器的同源策略引起的。 在这种情况下,如果服务端返回了带有Set-Cookie头部的响应,则浏览器默认不会设置该Cookie,导致Cookie失效问题。 解决这个问题的方法是使用CORS(跨域资源共享)技术,在服务端的响应头中添加”Acc…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部