Existe-t-il un moyen de déterminer le nombre de cœurs de processeur disponibles dans JavaScript, afin que vous puissiez ajuster le nombre de travailleurs Web en fonction de cela?Obtenir le nombre de cœurs de processeur en JavaScript?
Répondre
Oui, navigator.hardwareConcurrency. Pris en charge nativement dans Chrome, Firefox, Edge, Opera et Webkit; pris en charge dans tous les navigateurs avec a polyfill.
Il est indéfini quand je lance cela dans Chrome 35. – jmort253
Il est disponible dans la version actuelle de Chrome Canary selon http://src.chromium.org/ viewvc/blink? view = revision & revision = 175629 Confirmé travaillé dans Chrome Canary 37. –
Est-il une partie de la norme de quelque sorte (comme soutenu ou destiné à être pris en charge dans d'autres navigateurs)? – jayarjo
Non, sauf si vous utilisez un ActiveX.
Court, et au point. +1;) – falstro
Ok, c'est ce à quoi je m'attendais. Encore merci! – tsauerwein
Bien qu'il existe des discussions dans la liste de diffusion WHATWG sur la fourniture d'un attribut similaire dans la version 2 de la spécification: http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-November/024058.html http: //lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-November/023993.html – tsauerwein
Non. JavaScript est très loin de ces détails matériels et n'a aucun mécanisme légitime pour les interroger.
Vous pouvez essayer d'estimer le nombre de cœurs avec: https://github.com/oftn/core-estimator
Démo: http://eligrey.com/blog/post/cpu-core-estimation-with-javascript
Voici un estimateur assez rapide, je concurrency piraté ensemble ... il n'a pas subi beaucoup d'essais encore:
Voici le code des travailleurs courent (depuis que j'ai un lien jsFiddle un échantillon est nécessaire):
// create worker concurrency estimation code as blob
var blobUrl = URL.createObjectURL(new Blob(['(',
function() {
self.addEventListener('message', function(e) {
// run worker for 4 ms
var st = Date.now();
var et = st + 4;
while(Date.now() < et);
self.postMessage({st: st, et: et});
});
}.toString(),
')()'], {type: 'application/javascript'}));
L'estimateur a un grand nombre de travailleurs pour une durée courte de temps (4ms) et de faire rapport le temps qu'ils ont couru (malheureusement, performance.now() est disponible dans les Web Workers pour plus synchronisation précise). Le thread principal vérifie ensuite pour voir le nombre maximal de travailleurs qui étaient en cours d'exécution en même temps. Ce test est répété un certain nombre de fois pour obtenir un échantillon décent pour produire une estimation avec. Donc, l'idée principale est que, étant donné un petit nombre de travail, les travailleurs ne devraient être programmés pour fonctionner en même temps s'il y a assez de cœurs pour supporter ce comportement. C'est évidemment juste une estimation, mais jusqu'à présent, il a été raisonnablement précis pour quelques machines que j'ai testées - ce qui est assez bon pour mon cas d'utilisation. Le nombre d'échantillons peut être augmenté pour obtenir une approximation plus précise; J'utilise simplement 10 parce que c'est rapide et je ne veux pas perdre de temps à estimer plutôt qu'à faire le travail.
+1 pour ce violon – random6174
devrait être # 2 réponse, bonne vitesse et précision – ViliusL
@meo: "Cet ordinateur a des cœurs de CPU". L'utilisateur moyen en sait encore moins sur les cœurs que JS;) – Piskvor
hahaha bon point – meo
Pourquoi est-ce que tout le monde qui écrit une page Web suppose qu'il peut prendre le contrôle de toutes les ressources de mon ordinateur? Je voudrais accomplir d'autres choses pendant que je lis la friandise d'information dont j'ai besoin de votre page Web. –