有没有人知道如何编写一个Javacript函数,如果浏览器的Javascript引擎在一段时间内处于空闲状态,该函数会返回true?
我很乐意使用mootools / jQuery等,如果更容易的话,稍微偏爱mootools。
编辑:
我的实际问题:我正在打电话给第三方的API。该调用立即返回,但它对DOM所做的实际工作持续了一段时间(在许多情况下为> 10秒)。我想在DOM工作完成后立即运行我的一些代码。我对我正在调用的API函数的内部一无所知,所以我一直在寻找一种确定函数是否已完成的通用方法。
答案 0 :(得分:3)
如果你调用这样一个函数,假设一个空闲时间计数器存在,那么它是否会重置?
如果您可以概述您要解决的问题,可能是我们可以帮您解决。我可以想办法解决“自此函数运行以来已经存在多长时间”或“自页面上一次事件以来已有多长时间”或“如果用户已在此页面上执行X秒“,但我没有任何好的方法”只有当X秒没有发生任何事情时才这样做。“
<强>更新强>
根据您的更新,我会在API中寻找一个回调机制(你可以分享它是什么吗?),这样你就可以在API完成后安排一些工作。如果这不起作用,您可以尝试添加以下内容:
setTimeout( function() { myCallbackMethod(); }, 0 );
这将安排在当前执行完成后启动回调。这取决于javascript引擎是单线程的,但我已经看到它用起来效果很好。
答案 1 :(得分:0)
有两个事实可以用来衡量javascript / flash线程的空闲状态。
Javascript有定时源(setTimeout, setInterval),仅在javascript空闲时才会打勾。因此,线程空闲越少,计时器就越慢。
“JavaScript只能执行一个 一次一段代码(因为它 每个这些都是单线程性质的 代码块正在“阻塞” 其他异步事件的进度。 这意味着当异步时 发生事件(如鼠标点击,a 计时器触发或XMLHttpRequest 完成)它排队等候 后来执行。“ How JavaScript Timers Work
Javascript有一个外部计时源,无论闲置如何都会打勾。类实例Date()基于外部时钟,您可以使用getTime()获得毫秒时序:
var timeSinceDisco =(新日期).getTime();
eJohn有一些有趣的测试using getTime() for benchmarking。
我们使用外部计时器Date.getTime()和内部时间setTimeout之间的差异来计算javascript线程的空闲程度。当然,对于像V8或tracemonkey这样的性感新javascript引擎来说,这不会起作用,因为它们使用多个线程。它应该适用于目前大多数浏览器。
答案 2 :(得分:0)
我99.4%肯定没有这样的功能,但是,我希望有,因为我真的需要它。
当然,您可以在此处构建自己的解决方案(在每个入口点函数的开头调用的函数),具体取决于详细信息。
var Tracker={
last: new Date().geTime(),
activity:function() { this.last=new Date().geTime(); },
idle:function() { return new Date().geTime()-this.last; }
}
...
var clickedSomething=function() {
Tracker.activity();
...real code..
}
答案 3 :(得分:0)
您可以调用一个函数来检查每个计时器间隔的鼠标X和Y位置,并将它们与上次保存的X和Y位置进行比较,如果它们相同,则它是空闲的。
答案 4 :(得分:0)
我认为这个可能很有用