2010-07-20 28 views
48

Có cách nào để xác định số lõi CPU có sẵn trong JavaScript, để bạn có thể điều chỉnh số lượng nhân viên web tùy thuộc vào điều đó không?Lấy số lõi CPU trong JavaScript?

+6

@meo: "Máy tính này có huh? Lõi CPU". Người dùng trung bình biết thậm chí ít hơn về lõi hơn JS;) – Piskvor

+0

hahaha điểm tốt – meo

+2

Tại sao mọi người viết một trang web giả định họ có thể kiểm soát toàn bộ tài nguyên của máy tính của tôi? Tôi muốn hoàn thành những thứ khác trong khi tôi đọc một mẩu thông tin tôi cần từ trang web của bạn. –

Trả lời

56

Có, navigator.hardwareConcurrency. Được hỗ trợ nguyên bản trong Chrome, Firefox, Edge, Opera và Webkit; được hỗ trợ trong tất cả các trình duyệt với a polyfill.

+1

Nó không xác định khi tôi chạy này trong Chrome 35. – jmort253

+0

Nó có sẵn trong xây dựng Chrome Canary hiện tại theo http://src.chromium.org/ viewvc/blink? view = revision & revision = 175629 Đã xác nhận đã làm việc trong Chrome Canary 37. –

+2

Đây có phải là một phần tiêu chuẩn của một số loại (như được hỗ trợ hoặc có nghĩa là được hỗ trợ trong các trình duyệt khác) không? – jayarjo

20

Không, không có, trừ khi bạn sử dụng một số ActiveX.

+0

Ngắn gọn và cho điểm. 1;) – falstro

+0

Ok, đó là những gì tôi mong đợi. Vẫn cảm ơn! – tsauerwein

+0

Mặc dù có các cuộc thảo luận trong danh sách gửi thư WHATWG về việc cung cấp thuộc tính tương tự trong phiên bản 2 của thông số: 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

-2

Không. JavaScript rất xa các chi tiết phần cứng như vậy và không có cơ chế hợp pháp để truy vấn chúng.

10

Dưới đây là một ước lượng đồng thời khá nhanh tôi bị hack với nhau ... nó đã không trải qua nhiều thử nghiệm được nêu ra:

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

Dưới đây là mã người lao động chạy (kể từ khi tôi có một liên kết jsfiddle một mẫu là cần thiết):


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

ước tính có một số lượng lớn các công nhân chạy trong một khoảng thời gian ngắn (4ms) và báo cáo lại những thời điểm họ chạy (không may, performance.now() là không có sẵn trong Web Workers để biết thêm thời gian chính xác). Các chủ đề chính sau đó kiểm tra để xem số lượng tối đa của công nhân đang chạy trong cùng một thời gian. Thử nghiệm này được lặp đi lặp lại nhiều lần để có được một mẫu phong nha để tạo ra một ước tính. Vì vậy, ý tưởng chính là, với một đoạn công việc đủ nhỏ, công nhân chỉ nên được lên kế hoạch để chạy cùng một lúc nếu có đủ lõi để hỗ trợ hành vi đó. Nó rõ ràng chỉ là một ước tính, nhưng cho đến nay nó đã được hợp lý chính xác cho một vài máy tôi đã thử nghiệm - đó là đủ tốt cho trường hợp sử dụng của tôi. Số lượng mẫu có thể được tăng lên để có được một xấp xỉ chính xác hơn; Tôi chỉ sử dụng 10 vì nó nhanh chóng và tôi không muốn lãng phí thời gian ước tính so với chỉ nhận được công việc làm.

+0

+1 cho rằng fiddle – random6174

+0

nên đượC# 2 câu trả lời, tốc độ tốt và độ chính xác – ViliusL

Các vấn đề liên quan