Здесь есть много вещей, которые могут сильно изменить ваши наблюдения, например, как браузеры оптимизируют ваш код (особенно для таких простых циклов for), но чтобы ответить на общий вопрос Почему для работы через Web-Workers требуется больше время , затем ...
Вы работаете 10 рабочих параллельно. Если ваш компьютер не может запускать десять потоков одновременно, все ваши потоки действительно замедляются.
Как правило, никогда не превышайте navigator.hardwareConcurrency
- 1
количество одновременных веб-работников на одной странице.
Инициализация WebWorker не такая быстрая операция. Он включает в себя сетевой запрос, разбор js-файла, построение контекста. Так что инициализируйте его один раз, а затем попросите их сделать то, что вы хотите, несколько раз.
Но учтите, что даже тогда вы, вероятно, получите более медленные результаты при использовании Workers с такой маленькой операцией. Простая операция
worker.postMessage(); // in main
self.onmessage = e => self.postMessage(); // in worker.js
worker.onmessage = e => ... // back in main
уже будет происходить как минимум в 3 различных циклах событий, поскольку сообщения принимаются в цикле событий после того, из которого они были отправлены.
Если у вас нет некоторых операций, которые займут секунды, разгрузка на рабочем месте может действительно замедлиться.
Но даже если это происходит медленнее, выгрузка вашей работы в Worker позволяет освободить основной поток, и эти 30 мс вызовут выпадение двух кадров, что может сделать анимацию похожей на рывок, поэтому продолжайте использовать WebWorkers, но не для скорости.