多线程javascript

时间:2015-08-14 14:39:48

标签: javascript multithreading

我知道有很多人在javascript中询问多线程,但没有一个答案允许我做我想做的事。

我想在网页中绘制不同的图表。然而,最后一个图需要很长的计算时间来绘制。我正在使用多维矩阵结合map函数,因此我认为不可能优化这部分代码。

我想要做的是在完成第一个图形的计算后显示页面,并仅在最后一个图形的计算完成时显示最后一个图形。我的目标是避免因为最后一张图而冻结窗口。

示例:显示除最后一个之外的所有图形,让用户滚动窗口以查看不同的图形,在计算过程中显示加载消息而不是最后一个,并在计算完成时显示。

我尝试使用发电机和产量,但它不起作用......

这是我的代码:

function update() {
Promise.coroutine(function* () {
    // plot the first graphs
    plotThemAll(newC,newPV,newEL,newF,newModel,L);
    plotHydrogenProduction(newC,newPV,newEL,newF,newModel);

    //plot the last graph
    var plot = yield generateDataCF();

})().catch(function(errs) {
  //handle errors on any events
})
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

浏览器javascript仍然只在一个线程上运行 - 没有多线程,简单明了。但是,它并没有真正伤害到那么多 - 你可以做的是分配你的CPU密集型工作,并将这些分区与例如setTimeout。这样,后台计算将只占用CPU的合理块,并且站点将保持响应。

如果你正在使用承诺,这更容易 - 你只需要偶尔屈服。但你仍然需要明白必须屈服 - 没有先发制人的多任务处理。