【发布时间】:2019-02-16 12:30:28
【问题描述】:
我刚刚偶然发现我的应用存在性能问题。我正在尝试使用setInterval() 函数制作一个游戏循环,并使用this.forceUpdate() 不断地重新渲染我的游戏。我也尝试过使用this.setState() 重新渲染,但它们都感觉相同。现在,在我的游戏循环中,我不断更新蓝色方块(视图)的 y 位置。它会移动,但有点迟钝。
我将setInterval() 函数的间隔设置为 1000/60 以模拟 60FPS,但在我的应用程序中,感觉就像 20。我也尝试将间隔设置为 1,它很流畅,但它会卡顿很多。我得到了非常迷失方向的微小滞后尖峰。
我认为 this.forceUpdate() 或 this.setState() 不适合我的场景。
还有其他方法可以提高性能吗?
更新:我也使用了requestAnimationFrame() 函数,但它在重新渲染时仍然卡顿。 this.forceUpdate() 或 this.setState() 有替代品吗?我将如何延迟 requestAnimationFrame() 循环,使其以 60FPS 的速度关闭?
感谢阅读,希望我们能找到解决办法。
【问题讨论】:
-
这就是 requestAnimationFrame 的用途。见facebook.github.io/react-native/docs/timers
-
@estus 我忘了提,我也用过 requestAnimationFrame,它更流畅,但还是有点卡顿。有没有办法可以延迟 requestAnimateFrame 循环,使其仅更新到 60 FPS?
-
我会避免同时使用
setInterval,因为如果之前的迭代没有在1000/60内完成,您将面临产生多个游戏循环迭代的风险 -
我认为是你的渲染功能造成的。太重了。
标签: javascript reactjs performance loops react-native