web-dev-qa-db-fra.com

Obtenir des informations CPU / GPU / mémoire

J'ai besoin d'obtenir des informations sur le CPU/GPU/mémoire. Le nombre de cœurs, la valeur de la mémoire, la mémoire et l'utilisation du processeur ... J'ai trouvé un moyen de le faire pour IE: Comment utiliser JavaScript pour trouver du matériel Informations

des solutions pour d'autres navigateurs que je ne connais pas. Une idée de comment faire? peut-être que webgl a accès aux informations sur votre ordinateur? ou flash? ou toute autre technologie?

Merci beaucoup

36
Alex Nester

Ce code imprimera les informations GPU et listera toutes les informations que vous pouvez avoir avec l'objet de performance de ce navigateur (il n'y a pas de norme pour la nomenclature, donc elle change pour chaque navigateur).

<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>

Sortie en 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

Sortie dans Firfox:

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



Mozilla
Mozilla

Sortie dans Safari:

navigation
timing
now



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

Actuellement Chrome Canary prend en charge le retour de la quantité de cœurs de processeur en utilisant:

navigator.hardwareConcurrency

Cela a fonctionné pour moi dans Chrome Canary 37.

12
Bas van Dijk

J'ai écrit ce script rapide pour obtenir la vitesse du processeur:

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");

Notez que cela dépend des onglets du navigateur, de l'utilisation de la mémoire, etc. mais je l'ai trouvé assez précis si vous ne l'exécutez qu'une seule fois, par exemple lors du chargement d'une page.

Cela peut ne pas être précis pour les appareils de bureau, en particulier les PC, mais je ne l'utilise dans mon site Web que lorsque d'autres solutions comme la première échouent, pour obtenir la vitesse moyenne des appareils mobiles (me permet d'estimer les cœurs utilisés) en utilisant uniquement côté client JS. Ce n'est peut-être pas le meilleur, mais ça marche plutôt bien.

Si vous souhaitez que vous puissiez changer la constante de vitesse pour changer la vitesse, calculez-la simplement avec l'équation (connucpuspeed * connutimetocomplete)/cycles connus. Espérant que ceci puisse t'être utile!


MISE À JOUR 10/19/17: Changement de _speedconstant pour le nouveau moteur chrome V8 JS et ajout d'une section sur l'utilisation à laquelle je l'utilise.

7
Aaron Becker