[英]How can I pass an object reference to a function in Javascript / jQuery?
[英]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.