我知道很多人询问javascript中的多线程,但没有一个答案允许我做我想做的事情。
我想在网页中绘制不同的图表。然而,最后一个图需要很长的计算时间来绘制。我正在使用多维矩阵与map函数相结合,因此我认为没有可能优化这部分代码。
我想要做的是在第一个图形的计算完成后显示页面,并仅在最后一个图形的计算完成时显示最后一个图形。我的目标是避免仅仅因为最后一张图而冻结窗口。
示例:显示除最后一个以外的所有图形,允许用户滚动窗口以查看不同的图形,在计算期间显示加载消息而不是最后一个,并在计算完成时显示它。
我试着使用生成器和yield,但它不起作用...
下面是我的代码:
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
})
}谢谢你的帮助。
发布于 2015-08-14 22:44:56
浏览器javascript仍然只在单线程上运行-没有多线程,简单明了。然而,它实际上并不会造成太大的伤害-你可以做的是对你的CPU密集型工作进行分区,并使用例如setTimeout来分割这些分区。这样,后台计算将只占用合理的CPU块,并且站点将保持响应。
如果你在使用promises,这就更容易了--你只需要偶尔让步。但是你仍然需要理解你必须让步--没有先发制人的多任务处理。
https://stackoverflow.com/questions/32012705
复制相似问题