web-dev-qa-db-ja.com

CPU / GPU /メモリ情報を取得する

CPU/GPU /メモリに関する情報を取得する必要があります。コアの数、メモリ値、メモリ、およびCPU使用量... IEでこれを行う方法を見つけました: JavaScriptを使用してハードウェアを見つける方法情報

私が知らない他のブラウザのためのソリューション。それを行う方法はありますか?多分webglはあなたのコンピューターに関する情報にアクセスできますか?またはフラッシュ?または他の技術?

どうもありがとうございました

36
Alex Nester

このコードは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
22
Thomas

現在Chrome Canaryは次を使用してCPUコアの量を返すことをサポートしています:

navigator.hardwareConcurrency

この worked for for Chrome Canary 37。

12
Bas van Dijk

CPUの速度を取得するために、この簡単なスクリプトを作成しました。

var _speedconstant = 8.9997e-9; //if speed=(c*a)/t, then constant=(s*t)/a and time=(a*c)/s
var d = new Date();
var amount = 150000000;
var estprocessor = 1.7; //average processor speed, in GHZ
console.log("JSBenchmark by Aaron Becker, running loop "+amount+" times.     Estimated time (for "+estprocessor+"ghz processor) is "+(Math.round(((_speedconstant*amount)/estprocessor)*100)/100)+"s");
for (var i = amount; i>0; i--) {} 
var newd = new Date();
var accnewd = Number(String(newd.getSeconds())+"."+String(newd.getMilliseconds()));
var accd = Number(String(d.getSeconds())+"."+String(d.getMilliseconds())); 
var di = accnewd-accd;
//console.log(accnewd,accd,di);
if (d.getMinutes() != newd.getMinutes()) {
di = (60*(newd.getMinutes()-d.getMinutes()))+di}
spd = ((_speedconstant*amount)/di);
console.log("Time: "+Math.round(di*1000)/1000+"s, estimated speed: "+Math.round(spd*1000)/1000+"GHZ");

これはブラウザのタブ、メモリ使用量などに依存することに注意してください。しかし、ページの読み込み時などに一度だけ実行すると、かなり正確であることがわかりました。

これはデスクトップデバイス、特にPCでは正確ではないかもしれませんが、クライアント側のみを使用してモバイルデバイスの平均速度を取得するために(使用するコアを推定できるようにするために)最初のソリューションのような他のソリューションが失敗する場合にのみ、私のWebサイトで使用しますJS。最高ではないかもしれませんが、かなりうまくいきます。

_speedconstantを変更して速度を変更したい場合は、式(knowncpuspeed * knowntimetocomplete)/ knowncyclesで計算します。これがあなたの役に立つことを願っています!


更新10/19/17:新しいchrome V8 JSエンジンの_speedconstantを変更し、使用目的に関するセクションを追加しました。

7
Aaron Becker