Javascript 恒定的设置间隔如何影响页面功能(是否会减慢响应时间,或损害用户命令等)?
我有一个setInterval函数在加载时运行,用户在我的站点上的整个时间都在运行。基本上,它所做的是逐步扫描window.innerWidth和window.outerWidth之间的差异(也称为检测用户是否以100%缩放以外的任何方式查看站点),并对其进行补偿,因为我需要一个固定对象在缩小时居中对齐,但在放大时左对齐。现在,该功能每250毫秒运行一次。我想问的是,这对网页有什么影响?如果你只每四分之一秒运行一次,它“不应该”有多大影响。我说不应该,因为我不知道它到底在做什么,a)决定是否需要调整,b)进行调整 这就是说,这听起来像是针对事件而不是投票的情况。也许你应该看看Javascript 恒定的设置间隔如何影响页面功能(是否会减慢响应时间,或损害用户命令等)?,javascript,setinterval,Javascript,Setinterval,我有一个setInterval函数在加载时运行,用户在我的站点上的整个时间都在运行。基本上,它所做的是逐步扫描window.innerWidth和window.outerWidth之间的差异(也称为检测用户是否以100%缩放以外的任何方式查看站点),并对其进行补偿,因为我需要一个固定对象在缩小时居中对齐,但在放大时左对齐。现在,该功能每250毫秒运行一次。我想问的是,这对网页有什么影响?如果你只每四分之一秒运行一次,它“不应该”有多大影响。我说不应该,因为我不知道它到底在做什么,a)决定是否需要
窗口。onresize
如果你只是每四分之一秒运行一次,它“不应该”有太大的影响。我说不应该,因为我不知道它到底在做什么,a)决定是否需要调整,b)进行调整
这就是说,这听起来像是针对事件而不是投票的情况。也许你应该看看window.onresize你应该读一篇名为。基本上,所有js代码都在事件循环中运行,所有事件处理程序都排队并尽快执行: 为了了解计时器如何在内部工作,有一个 需要探讨的重要概念:计时器延迟不是 放心。因为浏览器中的所有JavaScript都在一个 线程异步事件(如鼠标单击和计时器)仅限于 在执行过程中出现空缺时运行 有时甚至可能不执行计时器处理程序;有时超时会过期两次,但解释器只有机会运行处理程序一次,从而丢弃另一个排队事件
真的,读那篇文章,它是值得的。你应该读一篇名为。基本上,所有js代码都在事件循环中运行,所有事件处理程序都排队并尽快执行: 为了了解计时器如何在内部工作,有一个 需要探讨的重要概念:计时器延迟不是 放心。因为浏览器中的所有JavaScript都在一个 线程异步事件(如鼠标单击和计时器)仅限于 在执行过程中出现空缺时运行 有时甚至可能不执行计时器处理程序;有时超时会过期两次,但解释器只有机会运行处理程序一次,从而丢弃另一个排队事件 真的,读那篇文章,它是值得的。如果你的问题中的一些回答足够回答你的问题,你应该礼貌地接受它们作为模式回答 此外,
setInterval
以250ms的间隔运行。如果函数的执行时间超过250ms,则可能会导致函数连续运行,从而降低用户计算机的速度
@ime vidas提供了一种更好的方法,它将您的函数排队,以便在上一个函数结束后运行一个延迟。如果您的问题中的一些回答能够充分回答,您应该礼貌地接受它们作为模式回答
此外,setInterval
以250ms的间隔运行。如果函数的执行时间超过250ms,则可能会导致函数连续运行,从而降低用户计算机的速度
@ime vidas给出了一种更好的方法,它将函数排队,以便在上一个函数结束后运行一个延迟。为什么不处理该事件,同时忘记计时器呢?我的非正式测试似乎表明,当缩放改变时也会触发此事件。我建议改为
setTimeout
<代码>设置超时(函数f(){/*做你的事*/setTimeout(f,250);},250)代码>我认为OP不想只运行一次函数。@AndrewHubbs看看我的代码。在函数体内部,我正在设置下一个超时。@ŠimeVidas:那篇文章绝对不正确。使用setInterval
,由于执行线程繁忙而错过的调用只会被丢弃,而不会排队。当事件循环再次运行时,setInterval
回调将尽快执行(如果过期),并按正常计划继续。事实上,您建议使用setTimeout
实际上适得其反,因为它会导致不规则的计时,这取决于回调执行所需的时间。为什么不一起处理事件并忘记计时器呢?我的非正式测试似乎表明,当缩放改变时也会触发此事件。我建议改为setTimeout
<代码>设置超时(函数f(){/*做你的事*/setTimeout(f,250);},250)代码>我认为OP不想只运行一次函数。@AndrewHubbs看看我的代码。在函数体内部,我正在设置下一个超时。@ŠimeVidas:那篇文章绝对不正确。使用setInterval
,由于执行线程繁忙而错过的调用只会被丢弃,而不会排队。当事件循环再次运行时,setInterval
回调将尽快执行(如果过期),并按正常计划继续。事实上,您建议使用setTimeout
实际上适得其反,因为它会导致不规则的计时,这取决于回调执行所需的时间。我甚至没想过要重新调整大小。非常感谢你,我甚至都没想过。多谢各位。