我知道有很多人在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
})
}
感谢您的帮助。
答案 0 :(得分:0)
浏览器javascript仍然只在一个线程上运行 - 没有多线程,简单明了。但是,它并没有真正伤害到那么多 - 你可以做的是分配你的CPU密集型工作,并将这些分区与例如setTimeout
。这样,后台计算将只占用CPU的合理块,并且站点将保持响应。
如果你正在使用承诺,这更容易 - 你只需要偶尔屈服。但你仍然需要明白你必须屈服 - 没有先发制人的多任务处理。