【发布时间】:2014-12-01 14:11:44
【问题描述】:
假设我有一个非常繁重的计算,它涉及两个嵌套的 for 循环,遍历大小为 1000*1000 的数组
计算大约需要 1 分钟。
我在网页上还有很多其他的事情,尤其是用户交互。 (点击、滚动、动画等)
-
现在我需要在某个时候进行 60 年代的计算。例如,我可以这样做:
setTimeout TwoForLoops,0这将推迟函数调用,直到所有其他点击、滚动等事件都被清除。 但是,由于计算需要 1 分钟,因此用户可能会在此期间触发某些事件。 你认为如果我只是执行以下操作,我会阻止 JavaScript 挂起。假设重计算 计算大约需要 0.06 毫秒。
# _.map is from underscore@ library, basically does a for loop # HeavyComputation is a slow function with lots of operations made for my app NonBlockMap = (x,f)-> setTimeout (->_.map x,f),0 NonBlockHeavyComputation = (x) -> setTimeout (-> HeavyComputation(x)),0 TwoForLoops = (ArrayOfArray) -> SecondLoop = (element) -> NonBlockHeavyComputation element FirstLoop = (array) -> NonBlockMap array, SecondLoop return NonBlockMap ArrayOfArray,FirstLoop这基本上意味着 javascript 将挂起的最大时间约为 0.06 毫秒,但 我不确定这是否可行。
做什么?
【问题讨论】:
-
您没有正确使用
setTimeout。它接受一个函数作为它的第一个参数。 -
是的,感谢您的快速更新
标签: javascript asynchronous coffeescript underscore.js nonblocking