Existe-t-il un moyen de déterminer le nombre de cœurs de processeur disponibles en JavaScript afin de pouvoir ajuster le nombre de travailleurs Web en fonction de cela?
Réponses
Trop de publicités?Oui, navigator.hardwareConcurrency . Prise en charge native dans Chrome 37, Opera 24 et (bientôt) Webkit; pris en charge dans tous les navigateurs avec le polyfill.
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 pas assez rapide simultanéité estimateur j'ai bidouillé... il n'a pas fait l'objet de tester encore:
Voici le code, les travailleurs de course (depuis que j'ai un jsfiddle lien d'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 exécuter pour une courte période de temps (4ms) et de présenter un rapport au temps qu'ils ont couru (malheureusement, la performance.maintenant() n'est pas disponible dans les Web workers pour plus d'un timing précis). Le thread principal puis vérifie le nombre maximum de travailleurs qui étaient en cours d'exécution dans le même temps. Ce test est répété un nombre de fois pour obtenir un décent de l'échantillon afin de produire une estimation avec.
Donc, l'idée principale est que, étant donné un assez petit morceau de travail, les travailleurs devraient seulement être programmé pour s'exécuter en même temps si il y a assez de carottes à l'appui de ce comportement. Il est bien sûr juste une estimation, mais il a jusqu'à présent été assez exacte pour quelques machines que j'ai testé -- qui est assez bon pour mon cas d'utilisation. Le nombre d'échantillons peut être augmentée afin d'obtenir une mesure plus précise de l'approximation; je viens de l'utiliser 10 parce que c'est rapide et je ne veux pas perdre de temps à l'estimation plutôt qu'à l'exécution des travaux.