Javascript 在onChange事件上使用Web Worker

Javascript 在onChange事件上使用Web Worker,javascript,reactjs,typescript,web-worker,Javascript,Reactjs,Typescript,Web Worker,我想问一下,在onChange事件中使用WebWorker是否是一种好方法。与此类似,webworker的新实例将在输入元素的每次更改中创建 我必须运行一些计算,而这些计算需要时间,因此我想将从输入元素获得的值发送给web worker,以便所有计算都在后台完成 下面是示例代码 const handleOnChange = async (e: any) => { const { value } = e.target; setInputValue(value); c

我想问一下,在onChange事件中使用WebWorker是否是一种好方法。与此类似,webworker的新实例将在输入元素的每次更改中创建

我必须运行一些计算,而这些计算需要时间,因此我想将从输入元素获得的值发送给web worker,以便所有计算都在后台完成

下面是示例代码

const handleOnChange = async (e: any) => {
    const { value } = e.target;
    setInputValue(value);

    const worker: Worker = new SearchWorker();
    worker.postMessage({ value });

    worker.addEventListener(
      "message",
      function (e) {
        setOutCome((state: any) => [...state, e.data]);
      },
      false
    )
}

不,这是个非常糟糕的主意。Web工作者是一个沉重的对象,它有自己的事件循环、自己的js环境、自己的globalscope等。开始一个工作本身就是一个巨大的操作(甚至包括网络协商等)。此外,如果您启动的工作线程多于计算机上的空闲CPU线程,那么您将使共享此线程的所有进程停止并行工作,而是在任务切换中,这意味着它们都会变慢。所以,只从max
navigator.hardwareConcurrency-1
worker开始,让他们执行多个任务,他们可以对它进行排队,不用担心。我如何创建它的一个实例,并在输入发生变化时将数据发送给worker?我使用的是react-typescript。您将worker存储在脚本可访问的变量中,在更改事件处理程序之外,并不断向同一个worker实例发布消息。我创建了一个singleton类,在该类中为我的worker创建了实例,它对我起到了作用。谢谢