【问题标题】:Passing the document object to a web worker将文档对象传递给网络工作者
【发布时间】:2012-08-08 21:00:22
【问题描述】:

我知道网络工作者不能直接访问 dom。但是这样做会不会是一个坏主意:

var doc = $(document);

var worker = new Worker("worker.js");

worker.postMessage({ cmd: 'doDomStuff', data: doc });

您认为这段代码有什么缺点吗?

非常感谢任何提示/cmets。

更新:明确一点:我只想从 DOM 中获取数据,而不是设置任何新值或以任何方式操作 DOM。

【问题讨论】:

  • 在其他语言中,操作 UI 的唯一线程是创建它的线程(我特别考虑的是 .Net,但 Java 和其他语言也可能这样做)。除非浏览器以不同方式处理事情,否则这可能就是网络工作者无法自然访问 DOM 的原因。
  • @CoreyOgburn 请看我的更新
  • 听起来很容易测试。
  • 在消息中发送你需要的数据

标签: jquery html web-worker


【解决方案1】:

我看不出您有任何不能这样做的原因,但是当您尝试在工作线程和主线程中操作相同的元素时,这可能会导致问题js代码。

您需要在代码中添加一些互斥锁。

抱歉,上面的内容划破了……


工人确实有权访问:

DOM(它不是线程安全的)
窗口对象
文档对象
父对象

Source

【讨论】:

  • 我知道工作人员没有直接访问 DOM 的权限,这就是我试图将其作为对象传递的原因。我忘了提到我不打算在工人中操纵它。我只想获取值,而不是设置任何东西。
  • @Johan 它不能对 dom 做 任何事情。您传递给它的 dom 中的任何内容基本上都是该对象的克隆,您将无法对它做任何事情....
  • @Johan 大多数 DOM 属性类似于 getter,而不是静态属性。副本不会有任何东西可以“得到”。如果可能的话,为了方便也复制整个文档对象会有点臭,除非你碰到了其中的绝大多数属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多