Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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循环_Javascript_Jquery_Loops - Fatal编程技术网

优化车轮游戏的Javascript循环

优化车轮游戏的Javascript循环,javascript,jquery,loops,Javascript,Jquery,Loops,我有一个我正在制作的游戏,灯光围绕一个圆圈的外侧运行,你必须尝试在同一个点上连续三次停止灯光。目前,我正在使用以下代码来循环灯光,并将其“打开”和“关闭”: 在大多数情况下,代码似乎运行得很好,但是如果我在另一个选项卡中同时运行一个视频,那么灯光的打开和关闭似乎有点嘎嘎作响。任何关于我如何可能加快这一速度的意见都将是非常好的 对于上面的代码示例,请查看此页面:我要注意的一点是,您使用了一个setTimeout(),实际上只是将其设计为类似于setInterval() 尝试改用setInterva

我有一个我正在制作的游戏,灯光围绕一个圆圈的外侧运行,你必须尝试在同一个点上连续三次停止灯光。目前,我正在使用以下代码来循环灯光,并将其“打开”和“关闭”:

在大多数情况下,代码似乎运行得很好,但是如果我在另一个选项卡中同时运行一个视频,那么灯光的打开和关闭似乎有点嘎嘎作响。任何关于我如何可能加快这一速度的意见都将是非常好的


对于上面的代码示例,请查看此页面:

我要注意的一点是,您使用了一个
setTimeout()
,实际上只是将其设计为类似于
setInterval()

尝试改用
setInterval()
。我不是js引擎大师,但我想经常重用setTimeout会对性能产生一些影响,而使用
setInterval()
(只需设置一次)时不会出现这种情况

编辑:

Diodeus的Curtousy,支持我声明的相关帖子:


我要注意的一点是,您使用了一个
setTimeout()
,实际上只是将其设计为类似于
setInterval()

尝试改用
setInterval()
。我不是js引擎大师,但我想经常重用setTimeout会对性能产生一些影响,而使用
setInterval()
(只需设置一次)时不会出现这种情况

编辑:

Diodeus的Curtousy,支持我声明的相关帖子:


当优化一件事时,首先要看的是不要做两次任何事情,你只需要做一次。从DOM中查找一个元素可能会很昂贵,而且您肯定知道需要哪些元素,所以为什么不预先获取所有元素并避免多次这样做呢

我的意思是你应该

var lights = $('.light');
这样你以后就可以说

 lights.eq(light_index).css("background-color", "red");
只需确保第一件事是在第二件事的范围内保持
灯光的地方进行


编辑:根据评论更新。

当优化要首先查看的内容时,不需要做两次任何事情,只需要做一次。从DOM中查找一个元素可能会很昂贵,而且您肯定知道需要哪些元素,所以为什么不预先获取所有元素并避免多次这样做呢

我的意思是你应该

var lights = $('.light');
这样你以后就可以说

 lights.eq(light_index).css("background-color", "red");
只需确保第一件事是在第二件事的范围内保持
灯光的地方进行


编辑:按注释更新。

我会为选择器引用创建一个全局数组,这样就不必在每次调用函数时都执行选择器引用。我也会考虑交换类名,而不是属性。

以下是jQuery性能的一些信息:


EDIT:那篇文章虽然很老了,但jQuery从那以后有了很大的发展。这是最近的:

我将为选择器引用创建一个全局数组,这样它们就不必在每次调用函数时都执行选择器。我也会考虑交换类名,而不是属性。

以下是jQuery性能的一些信息:


EDIT:那篇文章虽然很老了,但jQuery从那以后有了很大的发展。这是最近出现的:

您可以尝试将灯光元素存储在数组中,而不是每次都使用选择器。类选择器可能有点慢

var elements = $('.light');

function startLoop() {
    prevent_stop = false;
    $(elements[light_index]).css('background-color', '#fff');
    ...
}

这假设元素在DOM中已按其预期顺序排列。

您可以尝试将灯光元素存储在数组中,而不是每次都使用选择器。类选择器可能有点慢

var elements = $('.light');

function startLoop() {
    prevent_stop = false;
    $(elements[light_index]).css('background-color', '#fff');
    ...
}
这假设元素在DOM中已经按其预期顺序排列。

好的,这包括一些“最佳实践”改进,如果它真的优化了执行速度,则应该进行测试。至少你可以宣称你现在正在编写忍者风格的lol

干杯!好的,这包括一些“最佳实践”的改进,如果它真的优化了执行速度,应该测试一下。至少你可以宣称你现在正在编写忍者风格的lol


干杯!这是不对的。您应该使用
lights.eq(light\u index)
来获取jQuery对象。这是不正确的。您应该使用
lights.eq(light\u index)
来获取jQuery对象。请仔细阅读此主题:@Diodeus谢谢您的参考。我认为在不断重置setTimeout()时,性能会有一定的滞后。我只是在谷歌上搜索信息来支持我的声明=爸好好看看这个话题:@Diodeus谢谢你的推荐。我认为在不断重置setTimeout()时,性能会有一定的滞后。我只是在谷歌上搜索信息来支持我的声明