我知道你们都会说"用定时器!",但是让我解释一下。
我正在制作类似宏的东西,需要在特定时间延迟后执行函数。我知道可以使用定时器来实现,但如果有50个定时器和50个回调函数,代码会是什么样子?使用“sleep”函数,所有代码可以很好地集中在一个函数中。由于Web Worker在单独的线程上运行,所以不存在冻结的问题。
我只知道两种不会占用CPU的制作睡眠功能的方法:
- 发出同步XHR请求到一个特殊的后端,该请求会让服务器等待GET给定的x秒钟。虽然这个方法可行,但非常不方便,并且取决于与服务器的ping值。
- 使用生成器函数(yield)并发送一条消息到主线程,该消息启动一个定时器。当定时器执行时,消息被发送回Worker以继续执行。这是一个非常好的解决方案,但据我所知,只适用于Firefox。Chrome不支持生成器函数。
还有其他实现睡眠功能的方法吗?
chrome://flags/
启用Harmony支持,然后您可以使用var generator = function*() { /*do something*/ yield 1; /* do something else*/ yield 2; /* finish your stuff */}; var g = generator();g.next(); /*when you're ready...*/ g.next(); // etc
创建一个生成器。 - Rob W