javascript - 在 Javascript 中访问对象时自动调用函数

标签 javascript multithreading web-worker

我目前正在进行一个包含很多库的大型 Javascript 项目。 我想让这个项目的某些部分在单独的线程上运行。 Javascript 中已经有一些东西可以做到这一点:网络 worker 。

尽管如此,网络工作人员无法访问 window 对象,并且许多库都使用它。有没有办法自动将对窗口对象(在用于网络工作人员的库中)的调用更改为发送到父线程的消息?

然后,父线程将执行worker想要的操作,并将结果发送回worker。

可以这样做吗?我是的,你知道怎么做吗?

谢谢!

最佳答案

恐怕没有真正的解决方案。您可能想要的是工作线程中的一个特殊对象,它在每次属性访问时将执行传递给分派(dispatch)线程 - 该线程使用原始窗口对象处理请求。

为此,您需要某种包罗万象的访问器方法,该方法将在引用属性时运行。遗憾的是,Javascript 中没有这样的东西,请参阅此详细讨论(尤其是 T.J. Crowder 的回答):Is it possible to implement dynamic getters/setters in JavaScript?

ECMAScript 6 引入了一种名为 Proxy 的新机制(目前在 FF 和 IE12 中受支持(看图!)),从技术上讲,这将使您能够进行这些动态属性查找 - 但我觉得您的想法存在一个更根本的问题:您的目标是将本地调用转换为跨越单线程环境边界的消息。

从工作线程传递到工作线程的消息必须是异步的(因为 JavaScript“线程”在产生之前不能被中断),这意味着即使您确实设法设置这样的代理,它也会有效地将通常同步的操作(即属性访问)转变为异步操作,这是一个相当大的问题,特别是如果您正在寻找直接替代品以使用某些现有库。

关于javascript - 在 Javascript 中访问对象时自动调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31328226/

相关文章:

javascript - 创建触发第二个事件的事件

java - 使用Javascript在webview(Android)中填写表单而无需输入类型的元素ID - 文本和密码?

java - 多线程将如何影响 Easy Rules 引擎?

multithreading - C/C++ 和其他语言中的条件变量使用模式

javascript - IE8 的谷歌地图 .setMap 问题

javascript - Youtube API - 如何删除事件监听器?

Java线程看似跳过条件语句

javascript - 可以使用网络 worker 来使计时更加准确吗

javascript - ImportScripts() Web Worker 变量范围

javascript - 在 Web Worker 中解析 XML