获取CPU/GPU/内存信息

问题描述 投票:0回答:3

我需要获取有关 CPU/GPU/内存的任何信息。核心数、内存值、内存和 cpu 使用情况... 我找到了一种针对 IE 的方法:How to Use JavaScript to Find Hardware Information

我不知道其他浏览器的解决方案。知道怎么做吗? 也许 webgl 可以访问有关您计算机的信息? 还是闪光? 或任何其他技术?

非常感谢

javascript memory webgl cpu gpu
3个回答
37
投票

此代码将打印 GPU 信息,并将列出您可以使用此浏览器的性能对象获得的所有信息(BOM 没有标准,因此它会因每个浏览器而异)。

<html>

<body>
  <canvas id="glcanvas" width="0" height="0"></canvas>
  <script>
    var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {};

    document.write("<br>");
    for (var value in performance) {
      document.write(value + "<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 中的输出:

onresourcetimingbufferfull
onwebkitresourcetimingbufferfull
timing
navigation
memory
now
getEntries
getEntriesByType
getEntriesByName
clearResourceTimings
setResourceTimingBufferSize
webkitClearResourceTimings
webkitSetResourceTimingBufferSize
mark
clearMarks
measure
clearMeasures
addEventListener
removeEventListener
dispatchEvent



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

Firfox 中的输出:

now
getEntries
getEntriesByType
getEntriesByName
clearResourceTimings
setResourceTimingBufferSize
mark
clearMarks
measure
clearMeasures
toJSON
timing
navigation
onresourcetimingbufferfull



Mozilla
Mozilla

Safari 中的输出:

navigation
timing
now



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

13
投票

目前 Chrome Canary 支持使用以下方法返回 CPU 内核数量:

navigator.hardwareConcurrency

在 Chrome Canary 37 中对我有用


11
投票

测量重复从数字中减去 1 以估计 CPU 速度所需的时间:

const runs = 150000000;
const cyclesPerRun = 9;
const cycles = runs * cyclesPerRun;
console.log(`Running loop ${runs} times. Expected time for a 1 GHz processor is ${Math.round((cycles/1000000000)*100)/100}s`);
const start = Date.now();
for (var i = runs; i>0; i--) {}
const end = Date.now();
const totalSeconds = (end - start) / 1000;
const speed = (cycles / totalSeconds) / 1000000000;
console.log("Time: " + Math.round(totalSeconds*1000)/1000 + "s, estimated speed: " + Math.round(speed*10)/10 + " GHz");

请注意,这取决于浏览器选项卡、内存使用情况等。但我发现如果你只运行一次它非常准确,比如在页面加载时。

对于桌面设备,尤其是 PC,这可能不准确,但我仅在其他解决方案(如第一个解决方案)失败时才在我的网站上使用它,以便仅使用客户端获取移动设备的平均速度(允许我估计使用的内核)-边JS。它可能不是最好的,但它做得很好。

另请注意,

cyclesPerRun
可能因 JavaScript 引擎和 CPU 而异。您可以通过在知道时钟速度的 CPU 上运行然后执行以下操作来估算它:

const knownSpeed = 3.7; // GHz
const estimatedCyclesPerRun =  knownSpeed / (runs/totalSeconds/1000000000);
console.log("cyclesPerRun = " + estimatedCyclesPerRun);
© www.soinside.com 2019 - 2024. All rights reserved.