Is there a way to determine the number of available CPU cores in JavaScript, so that you could adjust the number of web workers depending on that?
Yes. To quote MDN:
The
navigator.hardwareConcurrency
read-only property returns the number of logical processors available to run threads on the user's computer…Modern computers have multiple physical processor cores in their CPU (two or four cores is typical), but each physical core is also usually able to run more than one thread at a time using advanced scheduling techniques. So a four-core CPU may offer eight logical processor cores, for example. The number of logical processor cores can be used to measure the number of threads which can effectively be run at once without them having to context switch.
The browser may, however, choose to report a lower number of logical cores in order to represent more accurately the number of Workers that can run at once, so don't treat this as an absolute measurement of the number of cores in the user's system.
It's now supported by every browser except Internet Explorer. For compatibility with older browsers, or to bypass misguided browser privacy restrictions on the resolution of this parameter, you can use the polyfill core-estimator
(demo, blog post).