`

setTimeout定时器启动时刻测试

 
阅读更多
function formatDate(date){
	date = date || new Date();
	console.log(date.getFullYear()+"-"+(date.getMonth()+1)+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+":"+date.getMilliseconds());
}

var timer ;
function test(){
		
	timer = setTimeout(function(){
			formatDate();
			console.log('timeout');
	},10000);
	
	var startDate = new Date();
	var now = new Date();
	
	for(var i =0; i<5; i++){
		formatDate(startDate);
		// 5 second
		while(new Date () - startDate < 5*1000){
			
		}

		startDate = new Date();
	}
	
	formatDate();
	console.log('test finished');
}

test();

 

猜想:

A.定时器timeout启动时刻为JS运行时执行到setTimeout时开始,

B.定时器timeout在JS运行时执行完主逻辑后开始计时

 

针对如上测试用例,我们发现主逻辑大概执行5×5=25秒,定时器设定为10秒后执行,

如果猜想A成立,那么主逻辑执行完毕以后,基本上立刻执行定时器逻辑,无需等待

如果猜想B成立,那么主逻辑执行完25秒后,再过10秒执行定时器逻辑

 

在chrome下测试,发现A逻辑成立

 

如果将定时器时间间隔设置为30秒,那么主逻辑执行完毕以后,大概过5秒,执行定时器逻辑,进一步验证A猜想成立

 

在整个过程中,其实不难发现,setTimeout能够保证回调逻辑在timeout设置时间后执行,与setInterval相比,起码保证了最小时间间隔

分享到:
评论

相关推荐

    微信小程序—setTimeOut定时器的问题及解决

    背景 实验室需要将项目的app搬到微信的小程序上,终于知道为什么程序员是手艺人了,只要有需求,就要想方设法去填充这种需求,去年是小程序的...这两者都能实现定时任务,比如实现一个定时器,但是建议采用后者setT

    关于JS定时器(setTimeout setInterval)定时不准问题1

    关于JS定时器(setTimeout setInterval)定时不准问题1 在JavaScript中,setTimeout和setInterval是两个基本的定时器函数,用于实现延迟执行或循环执行某个函数。然而,这两个函数在执行时往往和我们设置的延迟时间...

    微信小程序—setTimeOut定时器的坑

    背景 实验室需要将项目的app搬到微信的小程序上,终于知道为什么程序员是手艺人了,只要有需求,就要想方设法去填充这种需求,去年是小程序的...这两者都能实现定时任务,比如实现一个定时器,但是建议采用后者setTim

    定时器测试

    2. 应用程序定时器:在应用程序中使用的定时器,如JavaScript的setTimeout和setInterval,Java的ScheduledExecutorService,C#的System.Timers.Timer等,它们通常基于用户空间的线程或异步回调。 3. 基于硬件的...

    vue项目开发中setTimeout等定时器的管理问题

    在`getListIng`方法中,只有当页面路径为`aaa`时才会启动定时器,否则清空`timeOut`。 了解以下关键点对于更好地管理定时器至关重要: 1. Vue的`$store`中的状态是全局的,路由切换并不会清除它们,仅在页面刷新时...

    Javascript定时器 三 setTimeout func 0

    当`setTimeout(func, 0)`被调用时,`func`会被放入宏任务队列的一个特殊子队列——定时器队列。只有当当前执行栈清空,且所有微任务执行完毕后,定时器队列中的任务才会被取出并执行。因此,即使`setTimeout(func, 0...

    Javascript定时器(二)——setTimeout与setInterval

    在这个主题中,我们将深入探讨`setTimeout`和`setInterval`这两个核心定时器函数,它们在JavaScript中的应用以及它们之间的区别。 首先,`setTimeout`函数用于在指定的毫秒数后调用一个函数或执行一段代码。它的...

    定时器(setTimeout/setInterval)调用带参函数失效解决方法

    首先来看下定时器的用法 1. setInterval(code,millisec[,”lang”]) setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。 参数 描述 code 必需,要调用的函数或要执行的代码串。 ...

    js 封装定时器解决多次调用定时器叠加问题及定时器无法清除的问题

    当一个函数或方法中包含`setTimeout`或`setInterval`,并且这个函数或方法被多次调用时,每次调用都会启动一个新的定时器,导致多个定时器并行运行。这不仅可能导致预期之外的行为,还可能消耗不必要的系统资源。 ...

    小程序笔记—性能测试下的定时器:setTimeout与setInterval

    但性能测试后发现存在定时器未跟随页面回收的问题,这个可能并不影响使用,但优秀的代码,怎能视而不见,同时这个又关系到小程序的评测指标。 仔细阅读文档后,发现定时器是可回收的,需要以下代码 setTimeout

    C++自定义定时器实现(多对象多定时器)

    - `start()` 和 `stop()` 方法,用于启动和停止定时器。 - `setTimeout()` 方法,用于设置定时器的超时时间。 - 一个内部计时机制,如使用`std::chrono`库来处理时间点和时间差。 - 回调接口,例如一个虚函数...

    简单定时器

    // 启动定时器 const timerId = startTimer(); // 暂停定时器 setTimeout(() =&gt; { stopTimer(timerId); }, 5000); // 5秒后暂停 ``` 在这个例子中,我们创建了一个每秒打印已过去时间的定时器,并在5秒后...

    js代码-settimeout 模拟实现 setinterval(带清除定时器的版本)

    // 某个时刻停止定时器 clearIntervalWithTimeout(timerId); ``` ### 总结 通过使用`setTimeout`并结合递归调用,我们可以模拟出类似`setInterval`的行为。这种方式的好处在于,当脚本阻塞时,定时器不会被立即触发...

    uni-app定时器实例

    - `clearTimeout()`: 使用这个函数可以取消由`setTimeout()`设置的定时器。 - `setInterval()`: 这个函数会在每指定的毫秒数后重复调用一个函数或执行某段代码。返回的也是定时器ID,用于清除定时器。 - `...

    js页面显示多个定时器

    // 启动定时器 startCountdown(); startHeartbeat(); ``` 在这个例子中,`startCountdown` 创建了一个每秒递减的倒计时,而`startHeartbeat` 创建了一个每半秒切换心形图标的动画。每个定时器都有自己的作用域...

    java后台定时器最简单用法实例,类似于js里的setTimeOut

    java后台定时器最简单用法实例,类似于js里的setTimeOut

    js定时器(执行一次、重复执行)

    - **setTimeout** 只执行一次,适用于需要延迟执行一次的任务,如加载动画的启动。 - **setInterval** 会周期性执行,适用于需要持续更新或循环执行的任务,如轮播图的切换。 在使用定时器时,需要注意避免内存泄漏...

Global site tag (gtag.js) - Google Analytics