优化车轮游戏的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()时,性能会有一定的滞后。我只是在谷歌上搜索信息来支持我的声明