2010-07-20 115 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