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年5月11日

相关文章

  • 深入理解JavaScript系列(2) 揭秘命名函数表达式

    当我们在书写JavaScript代码的时候,常常会使用函数表达式来定义函数。在函数表达式中,我们可以选择使用具名的函数表达式或者是匿名的函数表达式。而其中,命名函数表达式是比较少用的一种,因为它容易出现一些奇怪的问题。那么在这篇文章中,我们将会深入地探讨命名函数表达式的原理,以及解决其中可能出现的一些问题。 什么是命名函数表达式 命名函数表达式就是在函数表达…

    JavaScript 2023年6月10日
    00
  • JavaScript中运算符规则和隐式类型转换示例详解

    JavaScript中运算符规则和隐式类型转换示例详解 运算符规则 JavaScript中的运算符有自己的一些规则和优先级,如果不了解这些规则,可能会导致不符合预期的结果。以下是几个常用的运算符: 加法 +:用于数字相加或字符串拼接。 js console.log(5 + 7); // 12 console.log(‘Hello’ + ‘ ‘ + ‘Worl…

    JavaScript 2023年5月28日
    00
  • 弱类型语言javascript中 a,b 的运算实例小结

    为了理解“弱类型语言javascript中 a,b 的运算实例”,需先了解JS的数据类型。 JS的7种数据类型分为两种类型:原始类型和引用类型。- 原始类型:数字(Number)、字符串(String)、布尔(Boolean)、null、undefined、Symbol- 引用类型:对象(Object)、数组(Array)、函数(Function) JS中的…

    JavaScript 2023年6月10日
    00
  • javascript获取当前的时间戳的方法汇总

    总结 获取当前时间戳是前端开发中常见的操作,通过JavaScript可以实现多种方式获取当前时间戳。本文将综合介绍一些获取当前时间戳的方法。 Date.now()方法 Date.now()方法是ECMAScript 5引入的方法。它返回的是当前时间距离Unix Epoch的毫秒数。Unix Epoch是1970年1月1日UTC的午夜,相当于这一时刻的时间戳为…

    JavaScript 2023年5月27日
    00
  • 服务器端C#实现的CSS解析器

    服务器端C#实现的CSS解析器攻略 简介 服务器端C#实现的CSS解析器可以帮助我们在服务器端解析CSS文件,方便我们对于CSS文件进行修改、分析、压缩以及提取样式等操作。在本篇攻略中,我们将会讲解如何使用C#实现CSS解析器,以及其中的两个示例应用。 实现步骤 以下是使用C#实现CSS解析器的步骤: 安装NuGet包“CssParser”,该NuGet包是…

    JavaScript 2023年5月28日
    00
  • javascript实现dom元素可拖动

    要实现DOM元素可拖动,需要以下步骤: 给目标元素添加mousedown事件监听器,当鼠标按下时触发事件,并将鼠标在元素上的位置信息存储起来。 给document对象添加mousemove事件监听器,当鼠标移动时触发事件,并计算出移动的距离。 在mousemove事件中,根据鼠标移动的距离,重新设置目标元素的位置。 当鼠标松开时,移除事件监听器。 以下是实现…

    JavaScript 2023年6月10日
    00
  • js 数字、字符串、布尔值的转换方法(必看)

    JS 数字、字符串、布尔值的转换方法 转换为数字 parseInt() parseInt() 函数可将一个字符串转换为整数。 let str = ’15px’; let num = parseInt(str); console.log(num); // 15 可以设置第二个参数表示进制。 let str = ‘1011’; let num = parseIn…

    JavaScript 2023年5月28日
    00
  • javascript时间戳和日期字符串相互转换代码(超简单)

    下面是详细讲解“javascript时间戳和日期字符串相互转换代码(超简单)”的攻略: 时间戳和日期字符串的定义 时间戳是1970年1月1日00:00:00(格林威治标准时间)起至现在的总秒数,通常为一个整数。 日期字符串是一个按照一定格式表示的时间文本,常用的格式包括“年-月-日 时:分:秒”、“月/日/年 时:分:秒”等。 时间戳转日期字符串 // 时间…

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