首页 > 其他分享 >使用嵌套的 setTimeout 值得吗?

使用嵌套的 setTimeout 值得吗?

时间:2022-09-01 11:01:27浏览次数:109  
标签:值得 执行 函数 嵌套 func setTimeout 1000

使用嵌套的 setTimeout 值得吗?

有许多服务需要在某个定义的时间之后或在定义的时间间隔内执行。为了在一段时间后运行某些功能,我们使用 setTimeout 获取在定义时间之后执行的一些代码 .为了在一定的时间间隔后运行某些功能,我们通常使用 设置间隔, 它需要一些在每个定义的时间后执行的代码。 但是这里在使用 setInterval 时存在一些问题。让我们来探索一下。

 常量函数 = () => {  
 活动A; //进行耗时的同步计算  
 活动 B; //进行耗时的同步计算  
 }  
 设置间隔(函数,1000);

假设有一个函数 fun 需要在每 1000 毫秒后调用一次,浏览器中的计时器线程开始倒计时,当时间到时,将回调函数(在我们的例子中是 func)放入 javascript 线程的执行堆栈中。为了更好地理解,我们将及时分解我们的执行。

在 T=0 秒(最初):我们的堆栈中有函数 func ,附加的计时器为 1 秒。

在 T=1 秒时:堆栈中的函数弹出并开始执行。同时,函数 func 再次以 1 秒的计时器压入堆栈。

现在出现了两种情况,

情况1:函数体在1秒内执行。

这种情况是正常的,代码会按预期运行。

情况2:函数体执行时间超过1秒。

在这种情况下,引擎会等待函数 func 完成,然后检查调度程序并在时间到时立即运行它。在极端情况下,如果函数 func 的执行时间总是超过 1000 毫秒,那么调用将不会暂停。

Function calls for setInterval

注意:对 setInterval 的 func 调用之间的实际延迟小于代码中的延迟!

现在,解决这个问题的方法是什么?我们可以用 嵌套的 setTimeout。 让我告诉你怎么做。

 常量函数 = () => {  
 活动A; //进行耗时的同步计算  
 活动 B; //进行耗时的同步计算  
 设置超时(函数,1000);  
 }  
 设置超时(函数,1000);

同样,我们将及时分解我们的执行。

在 T=0 秒(最初):我们的堆栈中有函数 func ,附加的计时器为 1 秒。

在 T=1 秒:我们堆栈中的函数弹出并开始执行,现在在 Activity A 和 B 完成之后(假设它需要 x 秒)

在 T= (1+x) 秒:现在 setTimeout 执行,它再次将函数 func 推入堆栈,附加的计时器为 1 秒。

同样,在 ((1+x )+ (1)) 秒之后,函数 func 再次开始执行,然后继续。

Function calls for setTimeout

如果你注意到什么, 嵌套的 setTimeout 保证了函数执行的固定延迟(这里是 1s)。

使用嵌套的 setTimeout 而不是 setTimeout 有更多好处,因为 嵌套的 setTimeout 更灵活 因为我们可以根据我们的要求安排下一次通话。让我们看看如何。

 延迟 = 1000;  
 常量函数 = () => {  
 活动A; //进行耗时的同步计算  
 活动 B; //进行耗时的同步计算  
 延迟 += 1000;  
 设置超时(函数,延迟);  
 }  
 设置超时(函数,1000);

从上面的代码中,函数的执行发生在等差数列中,公差为 1000 毫秒,起始值为 1000 毫秒。

用法:

例如:例如,如果我们需要编写一个服务,它每 8 秒向服务器发送一次请求以获取数据,但是如果服务器过载,则应该将间隔增加到 8、16 或 24 秒……

例如:如果我们正在调度的函数是 CPU 密集型的,那么我们可以测量执行所花费的时间并计划迟早的下一次调用。

如果您正在考虑在您的代码段中使用 setInterval,请停下来考虑一下我们是否可以使用嵌套的 setTimeout。 还是值得的。

欲了解更多信息:

领英: https://www.linkedin.com/in/shivam-agrawal-a4a414181/

GitHub: https://github.com/shivam1192

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/7838/51260110

标签:值得,执行,函数,嵌套,func,setTimeout,1000
From: https://www.cnblogs.com/amboke/p/16645753.html

相关文章

  • perl 数组嵌套入哈希内
    这里是指数组作为hash的value,即一个key对应多个值这里利用perl中的特殊句柄DATA做示例用以备忘{perl数据结构一旦复杂点,可读性急剧下降,坑......
  • 嵌套类匿名类与封装类
    嵌套类在C#中可以将一个类定义在另一个类的内部;外面的类叫“外部类”,内部的类叫“嵌套类”;嵌套类和普通类相似,只是声明的位置比较特殊。classPerson{//外部类......
  • 在elasticsearch中对象object嵌套的使用
    1.添加映射PUT/object-test/{"mappings":{"properties":{"deviceNo":{"type":"keyword"},"......
  • js -- setTimeout 实现倒计时不准确的问题
    setTimeout、setInterval属于定时触发器线程属于macrotask,它的回调会受到GUI渲染、事件触发、http请求、等的影响。所以这两个不适合做精准的定时。最好的方法是定时矫正......
  • 除了Guava,Java开发者还值得了解的5个谷歌类库
    Guava是谷歌基于Java1.6的一个类库集合的扩展项目,包含了许多谷歌核心的Java常用库。除开Guava,还有一些谷歌的常用Java类库也值得我们关注,本文列出了其中的五个类库......
  • setTimeout、setInterval 和 requestAnimationFrame
    与setTimeout和setInterval不同,requestAnimationFrame不需要设置时间间隔,大多数电脑显示器的刷新频率是60Hz,大概相当于每秒钟重绘60次。大多数浏览器都会对重绘......
  • HTML DOM setTimeout() 方法
    HTMLDOMsetTimeout()方法 https://www.w3school.com.cn/jsref/met_win_settimeout.asp定义和用法setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。语......
  • react 二级路由嵌套
    嵌套路由之后,静态文静路径错误,更改webpack 打包output输出根目录,publicPath:'/',二级路由刷新之后白屏,在首页模板文件中路径前加  /,   ......
  • 前端知识之CSS(1)-css语法、css选择器(属性、伪类、伪元素、分组与嵌套)、css组合器
    目录前端基础之css1.关于css的介绍2.css语法3.三种编写CSS的方式3.1.style内部直接编写css代码3.2.link标签引入外部css文件3.3.标签内直接书写4.css选择器5.css组合器(重......
  • 04-React路由5版本(高亮, 嵌套, 参数传递... )
    React-Router-Dom(路由版本[5])简介React的一个插件库用于实现SPA应用基于React的项目基本都用API<BrowserRouter><HashRouter><Route><Redirect><Link><Na......