Javascript 在处理大量数据时停止webworker?

Javascript 在处理大量数据时停止webworker?,javascript,web-worker,Javascript,Web Worker,我希望使用Web Workers以块的形式处理图像数据,并对图像数据应用过滤器,因为直接在UI线程上工作似乎很慢。(我的问题并不是专门针对事物大格局中的图像数据处理) 我提出解决方案时的主要问题是,如果我将正在处理的图像分割成块,然后将数据发送给网络工作者,我仍然希望能够通过向网络工作者发送另一条消息来取消处理。不过,我的假设是,如果我使用传统的循环(而不是产生数据的递归函数)来处理数据,那么在该过程完成之前,我将无法接收更多的消息(否定发送取消消息的有用性) 是这样吗?到目前为止,我还没有尝试

我希望使用Web Workers以块的形式处理图像数据,并对图像数据应用过滤器,因为直接在UI线程上工作似乎很慢。(我的问题并不是专门针对事物大格局中的图像数据处理)

我提出解决方案时的主要问题是,如果我将正在处理的图像分割成块,然后将数据发送给网络工作者,我仍然希望能够通过向网络工作者发送另一条消息来取消处理。不过,我的假设是,如果我使用传统的循环(而不是产生数据的递归函数)来处理数据,那么在该过程完成之前,我将无法接收更多的消息(否定发送取消消息的有用性)

是这样吗?到目前为止,我还没有尝试过,但我想知道我是否值得在web worker中进一步拆分这些数据,以便它能够继续接收更多消息并处理它们


如果将其拆分是最好的方法,您将如何进行实质上的让步?我假设这将是某种1毫秒的超时,然后允许事件循环处理传入消息,然后让我的处理函数从它停止的地方开始,但是如果不是这样做的话,有人可以建议另一种方法吗?

您可以使用主web工作程序生成子工作程序,而不是“yeilding”。。。因此,让您为图像处理生成的主web工作程序处理来自主UI线程的传入消息,以及为它发布给自己的子工作程序的图像处理任务创建数据块。通过这种方式,您可以根据主UI线程传入的消息轻松终止或管理任何子worker,并且您的主web worker始终保持响应而不阻塞,需要某种形式的“屈服”,或者等待一段固定的超时时间,然后它才能再次响应消息。

只需使用生成器,该生成器每100次迭代生成一次,并由
setTimeout
恢复。是的,听起来不错。当然,你也可以是一个工作者,不确定你想做什么样的取消以及多久需要一次。我曾考虑过使用.terminate(),但我认为重新创建web工作者的开销会在某种程度上破坏使用它们的好处。我认为取消事件可能会经常被调用,因为我需要滑块,如果用户在处理之前更改了值,则取决于用户输入,这很可能会减慢速度。