Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个动画的Javascript setInterval性能下降_Javascript_Performance_Setinterval - Fatal编程技术网

多个动画的Javascript setInterval性能下降

多个动画的Javascript setInterval性能下降,javascript,performance,setinterval,Javascript,Performance,Setinterval,我正在使用setInterval(foo,ms)执行动画。我真的不想在这里发布动画的所有代码,因为它跨越多个文件。这基本上是一堆图像。在更新坐标以模拟重力时,我每秒都调用ctx.drawImage(img…) 我将画布分为两个部分,一个动画在左侧,一个在右侧。当其中一个被激活时,帧速率稳定在30 fps。但是,如果我同时激活它们,性能就会直线下降。这与我的计算机过载无关,因为我可以将每个动画的复杂度降低10倍,问题依然存在。我猜这两个时间间隔相互干扰 我的问题是执行多个setInterval调用

我正在使用
setInterval(foo,ms)
执行动画。我真的不想在这里发布动画的所有代码,因为它跨越多个文件。这基本上是一堆图像。在更新坐标以模拟重力时,我每秒都调用ctx.drawImage(img…)

我将画布分为两个部分,一个动画在左侧,一个在右侧。当其中一个被激活时,帧速率稳定在30 fps。但是,如果我同时激活它们,性能就会直线下降。这与我的计算机过载无关,因为我可以将每个动画的复杂度降低10倍,问题依然存在。我猜这两个时间间隔相互干扰

我的问题是执行多个setInterval调用是否安全。谢谢

我的问题是执行多个setInterval调用是否安全

简短回答:是的,绝对是

我的问题是执行多个setInterval调用是否安全


简短回答:是的,绝对是。

您可以有许多
setinterval()
没有问题,但请注意JS基本上是单线程的(每页)。多个“并发”线程实际上是通过在代码上跳过一个线程来处理的


这意味着计时将不一致——特别是如果其中一个方法需要相当长的运行时间。

您可以有许多
setinterval()
没有问题,但请注意JS基本上是单线程的(每页)。多个“并发”线程实际上是通过在代码上跳过一个线程来处理的


这意味着计时将不一致-尤其是如果其中一种方法需要相当长的时间运行。

是的,运行多个设置间隔是安全的。。使用setInterval没有潜在的性能问题。。如果您对自己的代码进行分析,您几乎肯定会发现问题所在。

是的,运行多个设置间隔是安全的。。使用setInterval没有潜在的性能问题。。如果对自己的代码进行分析,您几乎肯定会发现问题所在。

正如其他人所说,您可以拥有尽可能多的代码。然而,为了获得良好的性能,您应该尽可能少地使用。也许你可以找到一种方法,在两个动画中只使用一个间隔


但是,如果使用全局变量,可能会出现问题。这可能会对动画产生影响(甚至可能对性能产生影响,这取决于您使用动画的目的)。

正如其他人所说,您可以尽可能多地使用动画。然而,为了获得良好的性能,您应该尽可能少地使用。也许你可以找到一种方法,在两个动画中只使用一个间隔


但是,如果使用全局变量,可能会出现问题。这可能会对动画产生影响(甚至可能对性能产生影响,具体取决于您使用它们的目的)。

我建议使用setTimeout,这样可以避免性能问题

看看这个问题


它很好地解释了两者之间的区别以及为什么您通常应该使用setTimeout。

我建议使用setTimeout,它可以避免性能问题

看看这个问题


它很好地解释了两者之间的区别以及为什么您通常应该使用setTimeout。

只是一个暗中操作,但请确保setInterval()的回调不会调用setInterval()本身。这种事一直发生在我身上time@Greg-尽管我从setTimeout迁移到setInterval,但我确信这里的情况并非如此——不管怎样检查——绝对不是这样。只是暗中试探一下,但请确保setInterval()的回调不会调用setInterval()本身。这种事一直发生在我身上time@Greg-尽管我从setTimeout迁移到setInterval,但我确信这里的情况不是这样——不管怎样检查——绝对不是这样。我会调试它,但我鄙视调试功能,例如这些(或与图像相关的问题)b/c问题会在以后出现。我会调试它,但是我鄙视调试功能,比如这些(或者与图像相关的问题),b/c问题在以后会显现出来。好链接。我切换到setInterval b/c,取消setTimeout链接动画时遇到问题,我担心时间问题。例如,如果我希望每100毫秒执行一次,而我的代码的执行(假设)需要50毫秒,那么代码将每150毫秒执行一次setTimeout@puk请注意:您的最后一点,您可以在方法开始时使用
setTimeout()
,然后它将每101毫秒运行一次,而不管您的代码需要多长时间。仍然不完美,但要好得多:)哈哈,我喜欢最后的刺拳。好链接。我切换到setInterval b/c,取消setTimeout链接动画时遇到问题,我担心时间问题。例如,如果我希望每100毫秒执行一次,而我的代码的执行(假设)需要50毫秒,那么代码将每150毫秒执行一次setTimeout@puk请注意:您的最后一点,您可以在方法开始时使用
setTimeout()
,然后它将每101毫秒运行一次,而不管您的代码需要多长时间。仍然不完美,但要好得多:)