JavaScript-具有无限循环的动态启动/停止函数
动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行 假设用户希望在应用程序的屏幕上显示FPS。要做到这一点,javascript应该在每一帧上进行无限计算。但用户想要关闭这个功能,必须完全停止,而不需要任何持续的CPU负载 你能给我举个好例子吗?我认为在每次迭代中检查“if(stop)=>return”并不理想 动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行 根本不应该有无限循环。它会阻塞整个线程并冻结页面。Javascripts的功能是管理异步事件和任务,这就是您在这里应该做的:一个非常快的间隔,经常执行某个任务,但不是整个时间。现在停止,你可以简单地使用一个标志 你能给我举个好例子吗 在讨论FPS时,可以创建渲染“循环”,测量每秒帧数,并在以下情况下禁用该功能:JavaScript-具有无限循环的动态启动/停止函数,javascript,Javascript,动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行 假设用户希望在应用程序的屏幕上显示FPS。要做到这一点,javascript应该在每一帧上进行无限计算。但用户想要关闭这个功能,必须完全停止,而不需要任何持续的CPU负载 你能给我举个好例子吗?我认为在每次迭代中检查“if(stop)=>return”并不理想 动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行 根本不应该有无限循环。它会阻塞整个线程并冻结页面。Javascripts的功能是管理异步事件和任务,这
let measure = true; // the flag
const start = Date.now();
let count = 1;
(function render() {
// Draw something onto the screen
// measure
if(measure)
console.log("FPS: " + (count++ * 1000 / (Date.now() - start)));
requestAnimationFrame(render); // the async rendering task handler
})();
现在您可以将measure
设置为false somewhen,它将停止日志记录
我认为在每次迭代中检查“if(stop)=>return”并不理想
如果你担心纳秒,你应该考虑在汇编中编写你的代码。< /P> < P>另一个选项是使用它返回一个数字来引用间隔,这样我们可以在调用< /P>时清除它。 在本例中,我们将调用render 100次,然后清除间隔:
let count=1
设间隔为空
函数render(){
控制台清除()
//例如,让我们制作一些假bs编号
console.log(“FPS:+Math.floor(Math.random()*30))
计数++
//100次呼叫后,让我们清除间隔
如果(计数>100)清除间隔(间隔)
}
//用较小的数字替换100,以加快运行速度
//或者使用更大的数字使间隔运行得更慢
interval=setInterval(render,100)
使用setInterval
和clearInterval
此外,您现在应该知道,您没有在这里编写代码,您可以获得有关编写代码的帮助。您可以使用。尽管立即再次退出函数的CPU负载可以忽略不计。@GetOfMyLawn,使用setInterval,有一种与给定示例类似的方法?由于有很多方法可以这样做,并且答案受观点的影响,因此几乎可以肯定,这个问题太广泛和/或基于观点,应该关闭。也就是说:例如,谢谢!如果你想开始/停止/开始/停止。。。等等。。。运行此函数-您将如何执行此操作?在您的示例中,它只运行once@alexey不,它不会只运行一次,试试看:)哦,对了,它会在每一帧上继续运行。但是有没有办法完全停止函数(和循环)?是的,有。只需使用另一个标志?你的意思是在需要时“返回”吗?然后重新启动该函数-再次将其称为标准函数?这对我来说效率更高,谢谢!一般来说,您不需要在每一帧上计算FPS,例如,每秒计算一次就足够了,并且没有标记检查。也许您知道-JavaScript是否在每次迭代时都会在内部检查interval的值。。知道它是否应该继续。或者由JS编译器/运行时完成。这个问题可能用错了词,但我希望你理解了理想的保留是返回什么,你需要它的全部是将它传递给clearInterval
,这样它就知道你要停止哪个间隔,所以如果你有10个不同的setInterval
将其中一个setInterval
的结果传递给clearInterval
,JavaScript将知道停止哪一个。如果执行console.log(interval)
操作,您将看到它是一个数字