Web Worker
什么是 web worker
js本身是一种单线程设计,我们无法在同一时刻并行运行多个脚本。虽然可以用setInterval,setTimeout方法来模拟多线程,但实际上这些方法都是存在于主线程使用的一个事件循环里,一旦存在一个耗时操作,就会牵制主线程的操作,导致页面卡顿。
Web Worker通过引入类似线程的机制使这种问题得到了解决,通过在当前js主线程中使用worker类加载一个js文件来开辟一个新线程,起到互不阻塞执行的效果。这个js worker运行在另一个全局上下文中,不同于当前的window,所以不能用window变量来获取当前全局的范围。
什么时候使用
1 当需要一个js脚本进行大量的复杂计算时候,通过postMessage和onmessage进行通信
2 功能模块化。importScripts这个方法只能在worker线程中执行,该方法可以在worker线程中引入多个脚本,则该线程可以使用所引入脚本中的任意变量和函数。
3 当需要执行一个不断向后台发送更新请求的时候,可以将这个过程放到工作线程里,然后将结果返回给主线程。
如何使用
①创建一个线程:
通过new一个Worker实例来创建一个线程,构造函数参数传递一个指向js文件资源的url。
const worker = new Worker('a.js')