Javascript – 如何将jQuery对象(表)传递给Web worker?

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

计算总和的函数在主脚本中,并花了很多时间使浏览器无响应。 为了解决这个性能问题,我在JavaScript中创建了一个web worker来计算表中的总和。

问题是Web worker无法访问DOM。 我正在寻找一种方法将jQuery对象表传递给Web worker。

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

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

我如何将表传递给Web Worker?

谢谢

[编辑增加一些进一步的信息]

总和需要很长时间,因为表有很多行并计算不同的总和(总计,小计等)。 sum的值存储在表中(因此worker需要访问表来执行计算)。

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

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

你可以这样做,记住你可以将字符串或数字作为对象传递。 然后遍历数字并继续接收字符串。 然后使用table.innerHTML来改变它。

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