繁体   English   中英

Javascript-如何将jQuery对象(表)传递给Web Worker?

[英]Javascript - How can I pass a jQuery object (table) to a web worker?

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

计算总和的功能在主脚本中,并且花费了大量时间使浏览器无响应。 为了解决此性能问题,我用JavaScript创建了一个Web工作程序来计算表上的总和。

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

如果我尝试传递jQuery对象,则会收到错误消息:

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

如何将表传递给Web Worker?

谢谢

[编辑添加了更多信息]

由于表有很多行并计算不同的总和(总计,小计等),所以总和需要很长时间。 要求和的值存储在表中(因此工作人员需要访问表才能执行计算)。

我的想法是将DOM对象传递给工作人员以计算总和。 计算后,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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM