获取CPU/GPU/内存信息

Get CPU/GPU/memory information

本文关键字:信息 内存 GPU 获取 CPU      更新时间:2023-09-26

我需要获得有关CPU/GPU/内存的任何信息。核数、内存值、内存和cpu使用率……我为IE找到了一种方法:如何使用JavaScript查找硬件信息

我不知道其他浏览器的

解决方案。知道怎么做吗?也许webgl可以访问您的计算机信息?还是闪?或者其他技术?

非常感谢

这段代码将打印GPU信息,并列出您可以从该浏览器的Performance对象获得的所有信息(每个浏览器都不同)。

<html>
<body>
  <canvas id="glcanvas" width="0" height="0"></canvas>
  <script>
    var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {};
    const performanceKeys = [];
    for (var value in performance) {
      performanceKeys.push(value);
    }
    document.write("<br>");
    document.write(performanceKeys.sort().map((p) => '<a href="https://developer.mozilla.org/en-US/docs/Web/API/Performance/' + p + '">' + p + "</a>").join("<br>"));
    document.write("<br>");
    document.write("<br><br><br>");
    var canvas;
    canvas = document.getElementById("glcanvas");
    var gl = canvas.getContext("experimental-webgl");
    document.write(gl.getParameter(gl.RENDERER) + "<br>");
    document.write(gl.getParameter(gl.VENDOR) + "<br>");
    document.write(getUnmaskedInfo(gl).vendor + "<br>");
    document.write(getUnmaskedInfo(gl).renderer + "<br>");

    function getUnmaskedInfo(gl) {
      var unMaskedInfo = {
        renderer: '',
        vendor: ''
      };
      var dbgRenderInfo = gl.getExtension("WEBGL_debug_renderer_info");
      if (dbgRenderInfo != null) {
        unMaskedInfo.renderer = gl.getParameter(dbgRenderInfo.UNMASKED_RENDERER_WEBGL);
        unMaskedInfo.vendor = gl.getParameter(dbgRenderInfo.UNMASKED_VENDOR_WEBGL);
      }
      return unMaskedInfo;
    }
  </script>
</body>

Chrome输出:

addEventListener
clearMarks
clearMeasures
clearResourceTimings
dispatchEvent
eventCounts
getEntries
getEntriesByName
getEntriesByType
mark
measure
memory
navigation
now
onresourcetimingbufferfull
removeEventListener
setResourceTimingBufferSize
timeOrigin
timing
toJSON

WebKit WebGL
WebKit
NVIDIA Corporation
NVIDIA GeForce GTX 775M OpenGL Engine

Firefox输出:

addEventListener
clearMarks
clearMeasures
clearResourceTimings
dispatchEvent
eventCounts
getEntries
getEntriesByName
getEntriesByType
mark
measure
navigation
now
onresourcetimingbufferfull
removeEventListener
setResourceTimingBufferSize
timeOrigin
timing
toJSON

Mozilla
Mozilla

Safari的输出:

addEventListener
clearMarks
clearMeasures
clearResourceTimings
dispatchEvent
getEntries
getEntriesByName
getEntriesByType
mark
measure
navigation
now
onresourcetimingbufferfull
removeEventListener
setResourceTimingBufferSize
timeOrigin
timing
toJSON

WebKit WebGL
WebKit
NVIDIA Corporation
NVIDIA GeForce GTX 775M OpenGL Engine

目前Chrome金丝雀支持返回CPU内核的数量使用:

navigator.hardwareConcurrency

通过计时减少变量数百万次所需的时间来估计CPU速度:

const runs = 150000000;
const start = performance.now(); // in ms, usually with 100us resolution
for (let i = runs; i>0; i--) {}
const end = performance.now();
const ms = end - start;
const cyclesPerRun = 2;
const speed = (runs / ms / 1000000) * cyclesPerRun;
console.log(`Time: ${Math.round(ms)/1000}s, estimated speed: ${Math.round(speed*10)/10} GHz`);

* cyclesPerRun是一种非常粗略的映射"每秒减法"的方法。不同的浏览器(因为它们的JavaScript引擎可能会以不同的方式优化代码)和cpu(因为它们可能能够流水线更多的指令,它们可能会更快地提高频率,等等),它会有很大的不同。您可能最好只是使用runs / ms作为通用的"CPU速度";参数,而不是尝试用cyclesPerRun估计GHz的时钟速度。

你也可以通过在你知道时钟速度的CPU上运行上面的代码来估计cyclesPerRun,然后这样做:

const knownSpeed = 3.2; // GHz
const estimatedCyclesPerRun = knownSpeed / (runs/ms/1000000);
console.log("cyclesPerRun = " + estimatedCyclesPerRun);

这个基准还取决于用户打开的浏览器选项卡的数量,或者是否有其他程序(如视频游戏)已经在使用计算机的资源等。