我刚刚开发了一个JS游戏,它有太多的setIntervals来调用函数。间隔正在产生闪烁效果,这是不可接受的。我想与专家核实一下,我是否可以顺利采用替代setInterval调用,这也很顺利?
答案 0 :(得分:4)
你没有“递归电话”。你有很多计时器被创建。对于每个新的泡泡,你创建一个新的计时器!每20毫秒发射一百个回调函数!在每个电话中你都可以
$(bubble).offset().top;
if (pos >= 0 - $(bubble).height()) {
$(bubble).css({ top: (pos - 1000) + "px" });
}
构造一个jquery对象(3次!),计算其偏移量,查询其高度......每20毫秒一百次!
对于每个创建的气泡,您应该缓存其jquery对象及其当前位置。将它们保存在数组或散列中:bubbleJqueryObjects和bubblePositions。使单个 animateBubbles()回调,只一次更新所有现有气泡的“top”css属性。保存5000个函数调用,15000个jquery对象构造和5000个位置\大小查询。每一秒。
答案 1 :(得分:1)
您可以查看Composite design pattern。它是一种流行的设计模式,用于处理分层类型数据并能够以快速方式查询它。
答案 2 :(得分:1)
我怀疑你的性能问题是每个气泡,你创建一个新的动画师功能,每20ms执行一次。这是很多频繁执行的功能。
您可以通过将所有气泡保留在一个数据结构中,并使用一个函数(每20ms执行一次)来一次更新所有气泡来提高性能。