Javascript-如何将jQuery对象(表)传递给web工作者



我有一个包含不同列和行的HTML表。用户可以内联编辑该表。当用户编辑表格时,我会在表格的行上计算一些和。

计算总和的函数在主脚本中,花费了大量时间使浏览器没有响应。为了解决这个性能问题,我用JavaScript创建了一个网络工作者来计算表上的总和。

问题是web工作者无法访问DOM。我正在寻找一种将jQuery对象表传递给web工作者的方法。

如果我试图传递jQuery对象,我会收到一个错误:

未捕获的DataCloneError:无法在"Worker"上执行"postMessage":无法克隆对象。

如何将表传递给Web Worker?

谢谢

[EDIT添加更多信息]

求和需要很长时间,因为表中有很多行,并且计算不同的和(合计、小计等)。要求和的值存储在表中(所以工人需要访问表来执行计算)。

我的想法是将DOM对象传递给worker来计算和。计算后,worker将总和返回给主线程,以便更新DOM中的值。

简而言之,您不能将DOM元素传递给工作者。只有数据(通常是字符串)才能传递给网络工作者,而不能传递给对象。您应该从表中提取数据,将其封装在一个对象中,将对象转换为json,将json发送给worker,对其进行处理,并将一些json返回到主线程。

您可以这样做请记住,您可以将字符串或数字作为对象传递。然后循环该数字并继续接收字符串。然后使用table.innerHTML进行更改。

const row = '<tr></tr>';
const worker = new Worker('worker.js');
worker.postmessage({'row': row});
worker.onmessage = function(e){
const result = e.data.result;
//do something
};
worker.terminate();

最新更新