是否可以在JavaScript中检测" 空闲 "时间?
我的主要用例可能是预取或预加载内容.
空闲时间:用户不活动或没有任何CPU使用的时间段
我正在测试setTimeout使用此测试的准确性.现在我注意到(正如预期的那样)setTimeout并不是非常准确,但对于大多数设备并不是非常不准确.现在,如果我在Chrome中运行测试并让它在后台标签中运行(那么,切换到另一个标签并在那里浏览),返回测试并检查结果(如果测试完成),它们会发生显着变化.看起来超时运行速度慢得多.在FF4或IE9中测试没有发生这种情况.
因此,看起来Chrome暂停或至少减慢了无法关注的标签中的javascript执行速度.关于这个问题在网上找不到多少.这意味着我们无法运行后台任务,例如使用XHR调用定期检查服务器,并且setInterval(我怀疑看到相同的行为setInterval,如果有时间,我会编写测试).
有没有遇到过这个?这种暂停/减速会有解决方法吗?你会把它称为一个错误,我应该这样提交吗?
当某个事件发生时,我希望我的网站向用户播放简短的通知声音.
声音应该不自动启动(瞬间)当网站被打开.相反,它应该通过JavaScript按需播放(当某个事件发生时).
重要的是,这也适用于旧浏览器(IE6等).
所以,基本上有两个问题:
<embed>vs. <object>vs. vs. vs. <audio>)在现代网络浏览器中,假设我做了setTimeout10分钟(在12:00),5分钟后让计算机进入睡眠状态,当系统再次唤醒时会发生什么?如果它在10分钟之前(12:09)或之后(16:00)醒来会发生什么?
我问的原因是因为我想每10分钟要求一个新的身份验证令牌,我不确定浏览器是否会做正确的事情并且如果长时间醒来后立即请求新的令牌时间.
澄清:我不想使用cookies - 我正在尝试在这里建立一个Web服务; 是的,服务器将拒绝旧的和无效的令牌.
我的网站上有一个jQuery滑块,下一张幻灯片的代码位于一个名为nextImage的函数中.我使用setInterval在计时器上运行我的函数,它完全符合我的要求:它在计时器上运行我的幻灯片.但是,如果我转到Chrome中的网站,切换到另一个标签并返回,滑块会持续穿过幻灯片,直到它"赶上".有谁知道解决这个问题的方法.以下是我的代码.
setInterval(function() {
nextImage();
}, 8000);
Run Code Online (Sandbox Code Playgroud) 我有一个显示实时统计数据的页面.它运行了大量的javascript,产生了大量的HTTP请求,使用D3.js每隔几秒渲染一次SVG图表,有很多CSS动画,并经常重新排列DOM.
只要页面聚焦,它就会顺利运行.如果我切换到另一个选项卡并稍后再回来,通常会暂停一下,在视图突然显示为重新渲染并且页面再次可用之前,页面似乎已冻结.标签背景越长,暂停时间越长.如果标签已经在后台很长时间(几小时)并且我切换回它,它将被冻结很长时间然后崩溃.
所有这些行为都在Chrome中观察到.我没有在其他浏览器中测试过多.
选项卡在后台时Chrome不在做什么,以及当我第一次切换回选项卡时,在暂停期间它做了什么?
我也在做一些jQuery动画.这个答案 和这个答案可能是相关的.
根据第一个答案:
"非活动浏览器选项卡缓冲了一些setInterval或setTimeout函数."
stop(true,true)将停止所有缓冲的事件,并立即执行最后一个动画.
我在我的代码中添加了对.stop(true,true)的调用,至少对于远离选项卡的短途旅行,我没有发现打嗝.我需要将它留在后台很长一段时间并在我判断它是否有显着差异之前进行测试.
我的设置是一个多人游戏,带有用于异步传输数据的套接字.
现在,由于游戏的本质,我有一个游戏循环,应该每隔500毫秒进行一次玩家更新(例如位置,外观......).
var self = this;
this.gameLoop = setInterval(function()
{
for (var i = 0; i < playerSize; i++)
{
self.players.get(i).update();
};
}, 500);
Run Code Online (Sandbox Code Playgroud)
我目前正在使用setInterval,但当我做了大约200个连接的基准时,setInterval漂移到1000毫秒而不是500毫秒,这使得整个游戏看起来很滞后.不幸的是,对于少量玩家而言,它还不够准确.(请注意,更新调用最多只需要大约100毫秒)
所以在研究之后,似乎没有其他选择产生只处理定时机制的过程?还是有其他选择吗?
任何人都已经做过这个,或者可以提供一些基本的想法/解决方案来解决这个问题?
完整代码:
Game.prototype.start = function()
{
var average = 0;
var cycles = 10;
var prev = Date.now();
this.thread = setInterval(function()
{
console.log("interval time="+(Date.now() - prev));
prev = Date.now();
var s = Date.now();
// EXECUTE UPDATES
for (var i = 0; i < playerSize; i++)
{
self.players.get(i).update();
};
average += …Run Code Online (Sandbox Code Playgroud) 我正在尝试仅使用 javascript 控制台创建一个自动化程序。我需要使用 setInterval 为我的程序创建一个循环。相关部分的代码如下:
freshIntervalId=setInterval(tick,500);
因此“tick”函数每 500 毫秒就会被调用一次。
但问题是,每当浏览器选项卡处于非活动状态时,即我将其最小化以执行其他操作时,setInterval 就会停止工作。当我再次打开浏览器时,它突然重复了很多次,以“补偿”函数未执行的时间。这不是我所期望的。
我听说网络工作者可以解决这个问题。我只需要一(或两)行代码即可通过网络工作者进行工作,但由于我是 IT 业余爱好者,所以我无法理解所有代码行。我只能通过 JS 控制台访问浏览器,并且无法访问 HTML 及其脚本。
我的主要目标是使其循环并正常中断(setInterval 和clearInterval),同时浏览器仍处于非活动模式。
我现在应该怎么做?感谢您的阅读,希望有人能帮我解决这个问题!
我最近承担了在Javascript/jQuery中构建动画的任务.动画由围绕伦敦地图移动的圆圈组成.每次通过一个电台时,电台名称都带有下划线.
我仍在努力改进它,并注意到当标签处于非活动状态时,如果在返回页面时混淆了序列的时间.因为我将它嵌入iframe中当我使用$(window).focus()或时它似乎不起作用$(window).blur().
我使用jQuery动画函数为圆圈设置了动画,并简单地在文本下的所有行上设置了不透明度0并为它们添加了延迟,以便将不透明度设置为100.我在下面放了一个链接来显示动画,因为它是.我目前正在调整的动画仍有问题,但我不知道如何修复非活动标签问题.任何帮助都会很棒.
无框架: http ://www.gbutlercreative.co.uk/london/index.html
观察:我在Polymer中运行SPA,当我在chrome的新背景标签中打开内部链接时,页面没有完成加载(ajax和all),直到我专注于选项卡.
问题:什么是等待用户关注的chrome -or-什么是Polymer在完成呈现页面和发送ajax请求之前等待的内容?
额外奖励:我如何打开一个开发工具面板,其目标是我在后台打开的标签,以观察/未发生的情况?
奖励答案:如果您在选项卡上打开开发工具,导航离开选项卡,然后刷新开发工具,相关选项卡也将刷新并模拟已在背景中打开.
javascript ×9
jquery ×2
settimeout ×2
tabs ×2
audio ×1
console.log ×1
delay ×1
game-loop ×1
html ×1
html5-audio ×1
node.js ×1
polymer ×1
setinterval ×1
slider ×1
timer ×1
web-worker ×1