JavaScript setInterval函数替代方案

JavaScript setInterval函数替代方案,javascript,Javascript,我刚刚开发了一个JS游戏,它有太多的setInterval函数调用。间隔会产生不可接受的闪烁效果。我想和专家们核实一下,我是否可以通过使用setInterval调用的替代方法使其变得平滑,而setInterval调用也很平滑 看一看游戏你可能会看看游戏的内容。它是一种流行的设计模式,用于处理分层类型的数据并能够以快速的方式进行查询 你可以去看看这个房间。它是一种流行的设计模式,用于处理分层类型的数据并能够以快速的方式进行查询 您没有“递归调用”。你已经创建了很多计时器。为每个新气泡创建一个新计时

我刚刚开发了一个JS游戏,它有太多的setInterval函数调用。间隔会产生不可接受的闪烁效果。我想和专家们核实一下,我是否可以通过使用setInterval调用的替代方法使其变得平滑,而setInterval调用也很平滑

看一看游戏

你可能会看看游戏的内容。它是一种流行的设计模式,用于处理分层类型的数据并能够以快速的方式进行查询

你可以去看看这个房间。它是一种流行的设计模式,用于处理分层类型的数据并能够以快速的方式进行查询

您没有“递归调用”。你已经创建了很多计时器。为每个新气泡创建一个新计时器!每20毫秒就会触发100个回调函数!在每一次通话中,你都会这样做

$(bubble).offset().top;
    if (pos >= 0 - $(bubble).height()) {
        $(bubble).css({ top: (pos - 1000) + "px" });
    }
构造一个jquery对象(3次!),计算其偏移量,查询其高度。。。一百次,每20毫秒

对于每个创建的气泡,您应该缓存其jquery对象及其当前位置。将它们保存在数组或散列中:bubbleJqueryObjects和bubblePositions。使成为一个animatebubles()回调,它将立即更新所有现有气泡的“top”css属性。保存5000个函数调用、15000个jquery对象构造和5000个位置\大小查询。每秒钟。

您没有“递归调用”。你已经创建了很多计时器。为每个新气泡创建一个新计时器!每20毫秒就会触发100个回调函数!在每一次通话中,你都会这样做

$(bubble).offset().top;
    if (pos >= 0 - $(bubble).height()) {
        $(bubble).css({ top: (pos - 1000) + "px" });
    }
构造一个jquery对象(3次!),计算其偏移量,查询其高度。。。一百次,每20毫秒


对于每个创建的气泡,您应该缓存其jquery对象及其当前位置。将它们保存在数组或散列中:bubbleJqueryObjects和bubblePositions。使成为一个animatebubles()回调,它将立即更新所有现有气泡的“top”css属性。保存5000个函数调用、15000个jquery对象构造和5000个位置\大小查询。每秒。

我怀疑您的性能问题在于,对于每个气泡,您都会创建一个新的动画函数,该函数每20毫秒执行一次。这是许多频繁执行的函数


您可以通过将所有气泡保留在一个数据结构中,并使用一个函数(每20毫秒执行一次)来同时更新所有气泡来提高性能。

我怀疑您的性能问题在于,对于每个气泡,您都会创建一个新的动画函数,该函数每20毫秒执行一次。这是许多频繁执行的函数



您可以通过将所有气泡保留在一个数据结构中,并使用一个函数(每20毫秒执行一次)来同时更新所有气泡来提高性能。

您可以显示一些问题代码吗?是的,我的cpu已经进入了超速状态。。。但是我在你的代码中没有看到太多的递归?你总是可以使用显式堆栈迭代地重新编写递归代码,但是你确定递归导致了问题吗?创建的每个气泡都是静态的,它通过函数调用animatebuble(气泡)移动到顶部。此函数反复调用自身,直到气泡顶部小于-50为止。
animatebuble
使用
setInterval
重复执行。它不是递归的。你想要的是一种更流畅的动画制作方法。你能展示一些问题代码吗?是的,我的cpu已经超速了。。。但是我在你的代码中没有看到太多的递归?你总是可以使用显式堆栈迭代地重新编写递归代码,但是你确定递归导致了问题吗?创建的每个气泡都是静态的,它通过函数调用animatebuble(气泡)移动到顶部。此函数反复调用自身,直到气泡顶部小于-50为止。
animatebuble
使用
setInterval
重复执行。它不是递归的。你想要的是一个更平滑的方式来制作动画。很抱歉,这个链接不是一个很好的例子。但如果您查找复合设计模式,您应该会找到一个包含更多代码的好例子。Java中可能有一些很好的例子抱歉,链接不是很好的例子。但如果您查找复合设计模式,您应该会找到一个包含更多代码的好例子。在Java中可能有一些很好的例子,你知道什么是神奇的吗?这样做效率很低。这证明了JavaScript引擎已经走了多远。你还可以告诉我一件事吗。我已经为bubble-webkit转换定义了css规则:所有1都易于输入输出;。当我删除此规则时,气泡不会显示,它们的x、y位置都会更改。现代浏览器中的Java脚本正在编译为本机代码。但即使对于超高速JS来说,动画也太重了。间隔设置为20毫秒,如果气泡每秒移动50步,它们应该飞得像地狱一样快,但它们平静而优雅地缓慢,消耗CPU…如果使用webkit transition,请完全删除animateBuble()函数。告诉浏览器您希望气泡在N秒内从底部移动到顶部。你知道什么是神奇的吗?这样做效率很低。这证明了JavaScript引擎已经走了多远。你还可以告诉我一件事吗。我已经为bubble-webkit转换定义了css规则:所有1都易于输入输出;。当我删除此规则时,气泡不会显示,它们的x、y位置都会更改。现代浏览器中的Java脚本正在编译为本机代码。但即使对于超高速JS来说,动画也太重了。间隔设置为20毫秒,如果气泡每秒移动50步,它们应该飞得像地狱一样快,但它们平静而优雅地缓慢,消耗CPU…如果使用webkit transition,请完全删除animateBuble()函数。Te