我目前正在进行一个包含很多库的大型 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/