web Worker 本质是一个线程,在UI主线程之外并发执行的线程,主要解决耗时的JS任务。
首先了解浏览器的线程模型是怎样的?
- 程序: 计算机可以执行的代码,存在磁盘中 — 这是静止的(比如这是买的一块地皮);
- 进程: 把 程序 调入到内存中,等待被CPU执行 — 这是活动的(这是在地皮上建起来的几个工厂);
- 线程: 是CPU执行 进程 代码的基本单位 — 相当于生产任务(这是在工厂中进行生产的生产线);
- 而 进程 与 线程 的关系是: 进程是操作系统分配内存的基本单位,线程处于进程内部,是CPU执行代码的基本单位,一个进程中至少有一个线程,也可以有多个(就比如在一个工程内,可以有一条生产线,也可以有多条生产线),多个线程间并发执行,从宏观上看是‘同时’执行,微观上看是‘轮流’执行。
拿chrome中的线程模型举例
- chrome 中发起HTTP请求最多可以使用6个并发线程;
- 而负责向页面中执行绘制任务(HTML/CSS/JS/事件处理代码)的只有1个线程 — UI主线程,如果碰到耗时的代码就有问题了,解决的办法:创建一个新的线程,去执行耗时的JS任务 – 与UI主线程并发执行
Worker 线程的缺点: 浏览器禁止Worker线程操作任何BOM 和 DOM对象,不能使用Worder加载类似jQuery.js文件。