获取当前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);
代码的大致逻辑是:
- 先记录当前时间
startTime
。 - 等待一段时间(这里是 1000 毫秒),记录当前时间
endTime
。 - 使用
performance.measure
记录从Start Performance
事件到End Performance
事件之间的性能数据。 - 通过
performance.getEntriesByName
方法获取这段时间内的 CPU 使用率数据,然后计算 CPU 使用率并输出。
需要注意的是,由于 performance
对象的方法和属性在不同浏览器之间有些差异,所以上述代码逻辑中进行的是一些兼容性处理。另外,由于 performance.measure
、 performance.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);
代码的大致逻辑是:
- 在
main.js
中创建一个 Web Worker,并监听其消息事件。 - 在
worker.js
中定时(这里是每 1000 毫秒)获取当前线程和系统的 CPU 使用情况,并计算 CPU 使用率。 - 将计算结果通过
postMessage
发送给主线程。
需要注意的是,该方法同样存在兼容性问题,且需要使用 Web Worker,无法在单线程中获取 CPU 使用率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript获取当前cpu使用率的方法 - Python技术站