Web Worker
Web Worker即是运行在后台独立线程中的JavaScript脚本,可以用其来执行阻塞性程序以避免影响到页面的性能。Web Worker的两大特性是高效与并行,因为浏览器是单线程的,任何大量耗时的JS任务都会卡住界面,使浏览器无法响应任何操作,这样的用户体验非常糟糕。Web Workers可以将耗时任务拆解出去,降低主线程的压力,避免主线程无响应。但CPU资源是有限的,Web Workers并不能增加总体运行效率,算上通信的损耗,整体计算效率会有一定的下降。
Worker会运行在独立的不同于当前window的全局上下文中,因此我们并不能再Worker中进行DOM操作。
-
直接使用Worker构造函数创建的Worker被称为Dedicated Worker,其运行在所谓的DedicatedWorkerGlobalScope代表的上下文中,其仅允许创建脚本进行访问。
-
另一种Shared Worker则运行在SharedWorkerGlobalScope代表的上下文中,其允许多个脚本访问。
实际上ServiceWorkers也是Web Worker的一种,其常被用于Web应用之间,或者浏览器与网络之间的代理。ServiceWorkers致力于提供更良好的离线体验,并且能够介入到网络请求中完成缓存与更新等操作;ServiceWorkers同样能够被用于进行通知推送与后台同步接口。