2010-07-20 153 views
48

有没有一种方法可以确定JavaScript中可用CPU内核的数量,以便您可以根据这些数据调整Web工作者的数量?获取JavaScript中的CPU核心数量?

+6

@meo:“这台电脑拥有CPU核心。”普通用户对JS的了解比核心更少) – Piskvor 2010-07-20 11:52:44

+0

haha​​ha好点 – meo 2010-07-20 12:34:22

+2

为什么每个编写网页的人都假定他们可以控制我的计算机的全部资源?当我从你的网页上阅读我需要的一小部分信息时,我想完成其他的事情。 – 2010-07-20 12:39:53

回答

56

是的,navigator.hardwareConcurrency。在Chrome,Firefox,Edge,Opera和Webkit中本地支持;在所有浏览器中支持a polyfill

+1

我在Chrome 35中运行这个功能时没有定义。 – jmort253 2014-06-01 17:05:12

+0

根据http://src.chromium.org/,它可以在当前的Chrome Canary版本中使用。 viewvc/blink?view = revision&revision = 175629已确认在Chrome Canary 37中工作。 – 2014-06-15 12:38:35

+2

它是某种标准的一部分(如支持或意图在其他浏览器中支持)? – jayarjo 2014-09-07 17:45:20

20

不,没有,除非你使用一些ActiveX。

+0

简而言之, +1;) – falstro 2010-07-20 11:37:23

+0

好吧,那就是我期待的。还是谢谢! – tsauerwein 2010-07-21 10:16:10

+0

尽管WHATWG邮件列表中讨论了在规范的第2版中提供类似属性: 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 2010-08-11 11:06:43

-2

编号JavaScript离这些硬件细节很远,并且没有合法的机制来查询它们。

10

这里有一个相当快的并发估计我砍死在一起......它没有经过太多的测试尚未:

http://jsfiddle.net/Ma4YT/2/

这里的工人运行的代码(因为我有一个链接的jsfiddle的样本是必要的):


// 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'})); 

估算人员已经大量工人的运行很短的时间周期(4毫秒),并报告说,他们跑了次(遗憾的是,performance.now()是更多的网络工作者不可用准确的时间)。主线程然后检查以查看在同一时间内正在运行的工人的最大数量。这个测试重复了很多次,以得到一个体面的样本来产生一个估计。

所以主要的想法是,如果有足够的核心来支持这种行为,那么只要工作人员计划在同一时间运行。这显然只是一个估计,但到目前为止,对于我测试过的几台机器而言,这是相当准确的 - 这足以满足我的使用情况。可以增加样本的数量以获得更准确的近似值;我只用了10个,因为它速度很快,我不想浪费时间进行估算,而只是完成工作。

+0

该小提琴的+1 – random6174 2014-11-04 17:40:07

+0

应该是#2的答案,速度和准确性都很好 – ViliusL 2016-06-10 14:00:15