一. 什么是 Web Worker
Web Worker 的作用,就是为 JavaScript 发明多线程环境,容许主线程创立 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后盾运行,两者互不烦扰。等到 Worker 线程实现计算工作,再把后果返回给主线程。这样的益处是,一些计算密集型或高提早的工作,被 Worker 线程累赘了,主线程(通常负责 UI 交互)就会很晦涩,不会被阻塞或拖慢。
Worker 线程一旦新建胜利,就会始终运行,不会被主线程上的流动(比方用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。然而,这也造成了 Worker 比拟消耗资源,不应该适度应用,而且一旦应用结束,就应该敞开。
Web Worker 有以下几个应用留神点:
(1)同源限度
调配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。
(2)DOM 限度
Worker 线程所在的全局对象,与主线程不一样,无奈读取主线程所在网页的 DOM 对象,也无奈应用 document
、window
、parent
这些对象。然而,Worker 线程能够navigator
对象和 location
对象。
(3)通信联系
Worker 线程和主线程不在同一个上下文环境,它们不能间接通信,必须通过音讯实现。
(4)脚本限度
Worker 线程不能执行 alert()
办法和 confirm()
办法,但能够应用 XMLHttpRequest
对象收回 AJAX
申请。
(5)文件限度
Worker 线程无奈读取本地文件,即不能关上本机的文件系统(file://)
,它所加载的脚本,必须来自网络。