微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

了解JavaScript计时器线程问题

我开始使用一个实际上可以顺利运行的 JavaScript MMORPG.目前,我创建了一个演示程序,以证明我可以移动角色并让他们互相聊天,以及看到彼此实时移动.

http://set.rentfox.net/

现在Javascript计时器是我没有广泛使用的东西,但据我所知,纠正我,如果我错了,是同时发生多个setIntervals并不是真的很好b / c它都在一个线程上.

让我们说我想通过使用带有setInterval的精灵背景定位让10个不同的人在火星上对火球进行核对 – 这个动画需要10个setIntervals来重新绘制用于精灵背景位置移动的DOM.那不是一辆大马车吗?

我想知道是否有办法绕过这一切,也许使用Canvas,这样动画可以同时发生而不创建事件队列,我不必担心计时器.

希望这是有道理的,如果我需要进一步澄清,请告诉我.

解决方法

多个setIntervals的问题是双重的.第一个是你指出的,因为浏览器上的所有Javascript(当前)都是单线程的,一个定时器的执行可能会阻止下一个定时器的执行. ( Worker threads即将到来; Firefox already has them,Safari 4 [和其他人]也是如此.)第二个是计时器以设定的间隔发生,但如果你的处理程序在该间隔到期时仍在运行,则第二个间隔是完全的跳过.例如,计时器可以干扰自身.

最后一部分需要更多的解释:假设你有一个10ms的setInterval(这是你可以合理地期望任何实现的最快速度;可能会被钳制,以便它们不会比这更快).如果你的处理程序需要13毫秒,那么在它开始10ms后应该发生的间隔将被完全跳过.

我通常使用setTimeout来做这种事情.当我的处理程序被触发时,我会完成我的工作,然后在处理程序结束时安排下一个事件.然后(在你可以确定的范围内),我知道下一个事件将在那个时间间隔发生.

对于你正在做的事情,似乎单个“脉冲”计时器将是最好的,通过它需要对脉冲做什么.脉冲计时器是否使用setInterval或setTimeout是基于您在实际代码中看到的内容的判断调用.

原文地址:https://www.jb51.cc/js/158270.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐