我怎样才能以非阻塞的方式处理数字

how can i crunch numbers in a non-blocking way?

本文关键字:方式 处理 数字      更新时间:2024-04-26

我有一个lineCollection模型,这些模型表示图中的线。每一行处理一个dataCollection并生成一次平均值。就一句话来说,它非常轻快。

在获取dataCollection之后,我有一个监听器来处理每一行的数据。

lineCollection.invoke('setData')

但是,这种方式会冻结浏览器。我的下一个方法是尝试设置一个超时,希望能停止阻塞ui:

lineCollection.each(function(model) {
  setTimeout(model.setData, Math.round(Math.random() * 20));
});

这仍然冻结了整个过程。我如何告诉浏览器在后台处理数据?


编辑

在我的例子中,"压缩数据"是压缩约3600个长度数组的可变集,对每个切片求平均值,并格式化约3600个日期对象。

// x axis
var xs = _.map(times, this.formatTime);
// y axis
var values = _.map(allSamples, function(samples) {
  return _.pluck(samples, 'value');
});
var avgs = _.map(_.zip.apply(_, values), _.avg);
var ys = _.compact(avgs);
// graph data
var data = { x: xs.slice(xs.length - ys.length), y: ys };

我肯定会研究工作线程。