Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-具有无限循环的动态启动/停止函数_Javascript - Fatal编程技术网

JavaScript-具有无限循环的动态启动/停止函数

JavaScript-具有无限循环的动态启动/停止函数,javascript,Javascript,动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行 假设用户希望在应用程序的屏幕上显示FPS。要做到这一点,javascript应该在每一帧上进行无限计算。但用户想要关闭这个功能,必须完全停止,而不需要任何持续的CPU负载 你能给我举个好例子吗?我认为在每次迭代中检查“if(stop)=>return”并不理想 动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行 根本不应该有无限循环。它会阻塞整个线程并冻结页面。Javascripts的功能是管理异步事件和任务,这

动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行

假设用户希望在应用程序的屏幕上显示FPS。要做到这一点,javascript应该在每一帧上进行无限计算。但用户想要关闭这个功能,必须完全停止,而不需要任何持续的CPU负载

你能给我举个好例子吗?我认为在每次迭代中检查“if(stop)=>return”并不理想

动态启动/停止功能的最佳实践是什么,内部循环不受限制还是长时间运行

根本不应该有无限循环。它会阻塞整个线程并冻结页面。Javascripts的功能是管理异步事件和任务,这就是您在这里应该做的:一个非常快的间隔,经常执行某个任务,但不是整个时间。现在停止,你可以简单地使用一个标志

你能给我举个好例子吗

在讨论FPS时,可以创建渲染“循环”,测量每秒帧数,并在以下情况下禁用该功能:

 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)
操作,您将看到它是一个数字