我有一个包含不同列和行的HTML表。该表可以由用户进行内联编辑。当用户编辑表格时,我会计算表格中的行的总和。
计算总和的函数在主脚本中,并且花费了大量时间使浏览器没有响应。为了解决这个性能问题,我在JavaScript中创建了一个web worker来计算表上的总和。
问题是web worker无法访问DOM。我正在寻找一种将jQuery对象表传递给web worker的方法。
如果我试图传递jQuery对象,我会收到一个错误:
未捕获DataCloneError:无法对‘Worker’执行'postMessage‘:无法克隆对象。
如何将表传递给Web Worker?
谢谢
编辑添加一些进一步的信息
求和需要很长的时间,因为表中有很多行,并且会计算不同的和(合计、小计等)。要求和的值存储在表中(因此工作人员需要访问表才能执行计算)。
我的想法是将DOM对象传递给worker来计算和。计算完成后,worker将这些和返回给主线程,以便更新DOM中的值。
发布于 2015-04-29 23:47:43
简而言之,您不能将DOM元素传递给worker。只有数据,通常是字符串,才能传递给webworkers,而不是对象。您应该从表中提取数据,将其包装在一个对象中,将对象转换为json,将json发送给worker,对其进行处理,然后将一些json返回给主线程。
发布于 2018-10-20 05:12:06
您可以这样做,记住您可以将字符串或数字作为对象进行传递。然后循环遍历数字并继续接收字符串。然后使用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();
https://stackoverflow.com/questions/29947630
复制相似问题