【发布时间】:2015-08-05 05:14:55
【问题描述】:
我想使用 Web Worker 以块的形式处理图像数据并将过滤器应用于图像数据,因为直接在 UI 线程上工作似乎很慢。 (我的问题并不特定于总体方案中的图像数据处理)
我提出解决方案时的主要问题是,如果我要将正在处理的图像拆分成块,然后将该数据发送给 Web Worker,我仍然希望能够通过以下方式取消处理向网络工作者发送另一条消息。我的假设是,如果我使用传统循环(而不是产生的递归函数)来处理数据,那么在该过程完成之前我将无法接收更多消息(否定发送取消消息的有用性)。
是这样吗?我还没有尝试过,但我想知道是否值得我以某种方式在网络工作者本身中进一步拆分这些数据,以便它可以继续接收更多消息并处理它们。
如果拆分是最好的方法,您将如何实现基本收益?我认为这将是某种 1 毫秒的超时,然后允许事件循环处理传入的消息,然后让我的进程函数从它停止的地方开始,但如果这不是这样做的方法,有人可以建议另一个吗?
【问题讨论】:
-
只需使用生成器,每 100 次迭代产生一次,并由
setTimeout恢复。 -
是的,听起来不错。当然,你也可以
.terminate()工作人员,不知道你想取消什么样的取消,需要多久取消一次。 -
我考虑过使用 .terminate() 但我认为重新创建网络工作者的开销会在一定程度上破坏拥有它们的好处。我认为可能会经常调用取消事件,因为我想要滑块,并且取决于用户输入是否在处理之前更改了值,这很可能会减慢速度。
标签: javascript web-worker