当前位置: 首页 > 面试题库 >

是否有比setTimeout更准确的方法来创建Javascript计时器?

庄弘业
2023-03-14
问题内容

一直困扰我的是setTimeout()Javascript中的方法多么不可预测。

根据我的经验,在很多情况下计时器都非常不准确。所谓不准确,是指实际延迟时间或多或少地相差250-500ms。尽管这不是很长的时间,但是使用它来隐藏/显示UI元素时,时间显然是显而易见的。

是否有任何技巧可以确保setTimeout()准确执行(无需借助外部API),或者这是一个失败的原因?


问题答案:

是否有任何技巧可以确保setTimeout()准确执行(无需借助外部API),或者这是一个失败的原因?

不,不。您不会通过它获得任何接近完美准确的计时器的功能setTimeout()-尚未为此设置浏览器。 但是
,您也不需要依靠它来计时。多数动画库是在几年前弄清楚的:您使用设置了回调setTimeout(),但根据(new Date()).milliseconds(或等效值)的值确定需要执行的操作。这使您可以在较新的浏览器中利用更可靠的计时器支持,同时在较旧的浏览器上仍可正常运行。

它还 可以避免使用太多计时器
!这很重要:每个计时器都是一个回调。每个回调都执行JS代码。在执行JS代码时,浏览器事件(包括其他回调)将被延迟或丢弃。回调完成后,其他回调必须与其他浏览器事件竞争才能执行。因此,一个在该时间间隔内处理所有待处理任务的计时器将比两个时间间隔一致的计时器性能更好,并且(对于短超时)比两个重叠超时的计时器要好!

摘要:停止使用setTimeout()实现“一个计时器/一个任务”的设计,并使用实时时钟来平滑UI动作。



 类似资料:
  • 问题内容: 我需要创建一个简单但准确的计时器。 这是我的代码: 恰好在3600秒后,它将打印约3500秒。 为什么不准确? 如何创建准确的计时器? 问题答案: 为什么不准确? 因为您正在使用setTimeout()或setInterval()。他们不能被信任,没有针对他们的准确性保证。它们被允许 任意滞后,并且它们不能保持恒定的步伐而是趋向于漂移(如您所观察到的)。 如何创建准确的计时器? 使用该

  • 问题内容: 在Linux(或Solaris)上,有没有比重复进行手动分析更好的方法,以弄清您是否可以读取,写入或执行存储在内存中一个或多个地址上的内容? 例如,在Windows中,您拥有。 在Linux中,我可以更改这些值,但是无法读回。 此外,除了做一些极具侵害性的事情并在进程中的所有线程上使用并拦截任何可能影响内存的尝试外,是否有其他方法可以知道这些权限何时发生更改(例如,某人使用我背后的文件

  • 问题内容: 有什么方法可以创建一个在运行时确定的 真实名称 的函数,而无需使用,而仅使用纯JavaScript?(因此,不会生成任何特定于浏览器环境的生成的元素(无论如何在很多方面都是伪装的;不会使用一个特定JavaScript引擎的非标准功能,等等)。 请注意,我特别 不 问有关的变量或有名称,如性质引用匿名函数: 那里,尽管对象属性有一个名称,但 函数 没有。匿名函数适用于很多事情,但不适用于

  • 问题内容: 我需要将加密的数据从客户端发送到服务器。现在,我正在学习如何使用(要求)加密数据。按照这个公认的答案使用AES进行android加密/解密,我正在执行以下操作: 由于该算法使用,我不确定如果没有,是否可以在甚至其他程序中对此进行解码。 这种加密/解密是否仅在知道的值的情况下工作,或者由于我正在使用,我仍然需要传递其他内容才能解密? 另外,还有更好的方法吗?或者这还好吗? 问题答案: 不

  • 问题内容: 在我使用的许多代码中,都有一些可怕的东西,例如: 或者-更糟糕的是: 有正确的方法来: 创建一个新的URL(或者它是一个URI)。 向其添加正确的转义参数。 在这些参数中添加格式正确的文件路径。 将其解析为字符串。 从本质上讲,仅构建字符串比正确地构建字符串太容易了。有没有一种方法可以像构建字符串一样容易 地正确 完成呢? 添加 为了清楚起见-经过一番思考-我想我正在寻找类似的东西:

  • 本文向大家介绍JavaScript setInterval()与setTimeout()计时器,包括了JavaScript setInterval()与setTimeout()计时器的使用技巧和注意事项,需要的朋友参考一下   JavaScript是单线程语言,但是它可以通过设置超时值和间歇时间值来指定代码在特定的时刻执行。超时值是指在指定时间之后执行代码,间歇时间值是指每隔指定的时间就执行一次代