javascript 获取CPU/GPU/内存信息

wtzytmuj  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(884)

我需要得到任何关于CPU/GPU/内存的信息。核心数量,内存值,内存和cpu使用情况...我找到了一种方法来为IE做到这一点:How to Use JavaScript to Find Hardware Information
其他浏览器的解决方案我不知道。知道怎么做吗也许webgl可以访问有关您的计算机的信息?或者flash?或者其他技术?
非常感谢

kzipqqlq

kzipqqlq1#

此代码将打印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
laximzn5

laximzn52#

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

navigator.hardwareConcurrency

这个worked为我在Chrome金丝雀37.

kqlmhetl

kqlmhetl3#

测量从一个数字中反复减去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);

相关问题