[英]Non blocking Javascript and concurrency
我在网络工作者上有代码,并且因为我无法使用method(functions)向其发布对象,所以我不知道如何使用以下代码停止阻止UI:
if (data != 'null') {
obj['backupData'] = obj.tbl.data().toArray();
obj['backupAllData'] = data[0];
}
obj.tbl.clear();
obj.tbl.rows.add(obj['backupAllData']);
var ext = config.extension.substring(1);
$.fn.dataTable.ext.buttons[ext + 'Html5'].action(e, dt, button, config);
obj.tbl.clear();
obj.tbl.rows.add(obj['backupData'])
此代码从html表中导出记录。 数据是一个数组,是从Web Worker返回的,有时可以有50k或更多的对象。 由于obj
及其包含的所有方法都不能转让给我们工作者,因此,当数据长度为30k,40k或50k甚至更大时,UI会阻塞。 哪个是最好的方法? 提前致谢。
您可以尝试将繁重的工作包装在异步功能(例如超时)中,以使引擎在有时间时就将整个逻辑排队并进行详细说明
setTimeout(function(){
if (data != 'null') {
obj['backupData'] = obj.tbl.data().toArray();
obj['backupAllData'] = data[0];
}
//heavy stuff
}, 0)
或,如果代码太长,您可以尝试找出一种策略,将代码分成多个操作块,并在单独的异步函数中执行每个块(超时)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.