当前位置:首页 > 科技  > 软件

开 1000 个 Web Worker!我的页面能起飞吗?

来源: 责编: 时间:2024-05-29 17:32:06 93观看
导读背景最近看到一个很有趣的问题:页面中 Web Worker 数量是不是越多越好?如果设置 1000个,那岂不是无敌了?为此我们先准备一段代码,这段代码是计算一下从0累计到1亿,需要花费多少时间。图片图片可以发现需要耗费很久的时间,总

背景

最近看到一个很有趣的问题:页面中 Web Worker 数量是不是越多越好?如果设置 1000个,那岂不是无敌了?vZo28资讯网——每日最新资讯28at.com

为此我们先准备一段代码,这段代码是计算一下从0累计到1亿,需要花费多少时间。vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

可以发现需要耗费很久的时间,总共 43s,并且在这段时间内,主线程会被堵塞,后续的代码都执行不了,所以一般这种耗时的操作可以放在 WebWorker 中去分担主线程的工作。vZo28资讯网——每日最新资讯28at.com

使用 WebWorker

刚刚我们直接在主线程中去做累加的操作,是非常费时的,我们试试在 WebWorker 中去做,我们先准备一个 worker.js。vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

并且在 index.js 中去引入并创建 WebWorker 实例,我们先来试试一个实例,耗时多少?vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

可以发现时间大大缩短!!!只需要 4.9s!!!vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

那既然这样的话!!!是不是我们使用更多的 WebWorker 实例去分担工作,耗时就越短呢?vZo28资讯网——每日最新资讯28at.com

于是我开始增加 WebWorker 实例的数量。vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

从 1 开始加,发现总耗时确实越来越低了,但是当实例数量超过 16 个后,发现总耗时就没有下降过了!!!vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

原因其实很简单,因为线程的并行需要依赖于CPU的核数。我查看了一下我电脑的核心数,我的电脑是 16 核的。vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

也可以使用 navigator.hardwareConcurrency 这个 API 来看本电脑的核心数。vZo28资讯网——每日最新资讯28at.com

图片图片vZo28资讯网——每日最新资讯28at.com

总结

所以总结就是:WebWorker 是越多越好,但是也有上限,上限取决于你 CPU 的 核心数。vZo28资讯网——每日最新资讯28at.com

所以你如果想尽量多地使用 WebWorker 来分担工作,可以将数量设置为你的电脑的 CPU 核心数。vZo28资讯网——每日最新资讯28at.com

图片 图片 vZo28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-91532-0.html开 1000 个 Web Worker!我的页面能起飞吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一个 Python 对象会在何时被销毁?

下一篇: Spring 中如何控制 Bean 的加载顺序?

标签:
  • 热门焦点
Top