我一直在javascript中使用网络工作者。如果窗口,文档引用存在于Web worker环境中,那将是一个锦上添花。 我想知道为什么选择不在工人中提供这些参考资料的原因是什么?
还有任何解决方法可以使用这些参考资料吗?
答案 0 :(得分:5)
标准JavaScript和DOM API绝对没有允许多个线程安全访问相同对象的排除机制。
通常选择允许在JavaScript中进行多任务处理的解决方案是隔离线程,只让它们通过消息(或事件)进行交换。让网络工作者访问DOM可以打破这种隔离。
请注意,这并非完全针对JavaScript:几乎所有GUI框架(无论语言如何)都将GUI的修改限制为一个专用线程。 JavaScript更具限制性,因为大多数情况下(总是在浏览器中)您根本无法共享对象。
简单的解决方法是让后台线程为其提供指令through messages时,让浏览器中的主线程执行您需要进行的修改。或者更确切地说:只做webworker中的CPU扩展任务,让主线程获取输入数据,并在webworker发送输出数据时更新DOM。