我setInterval每秒运行一段代码30次.这很好用,但是当我选择另一个选项卡(以便我的代码的选项卡变为非活动状态)时,由于setInterval某种原因将其设置为空闲状态.
我做了这个简化的测试用例(http://jsfiddle.net/7f6DX/3/):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Run Code Online (Sandbox Code Playgroud)
如果您运行此代码然后切换到另一个选项卡,等待几秒钟然后返回,动画将继续在您切换到另一个选项卡时的位置.因此,如果选项卡处于非活动状态,则动画不会每秒运行30次.这可以通过计算setInterval每秒调用函数的次数来确认- 如果选项卡处于非活动状态,则不会是30,而只是1或2.
我想这是通过设计完成的,以提高性能,但有没有办法禁用这种行为?在我的场景中,它实际上是一个缺点.
我在页面加载时使用验证码,但由于某些安全原因它会阻塞
我面临问题:
Content Security Policy: The page's settings blocked the loading
of a resource at
http://www.google.com/recaptcha/api.js?onload=myCallBack&render=explicit
("script-src http://test.com:8080 'unsafe-inline' 'unsafe-eval'").
我使用了以下js和meta标签:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<script src="http://www.google.com/recaptcha/api.js?onload=myCallBack&render=explicit" async defer></script>
Run Code Online (Sandbox Code Playgroud) 在现代网络浏览器中,假设我做了setTimeout10分钟(在12:00),5分钟后让计算机进入睡眠状态,当系统再次唤醒时会发生什么?如果它在10分钟之前(12:09)或之后(16:00)醒来会发生什么?
我问的原因是因为我想每10分钟要求一个新的身份验证令牌,我不确定浏览器是否会做正确的事情并且如果长时间醒来后立即请求新的令牌时间.
澄清:我不想使用cookies - 我正在尝试在这里建立一个Web服务; 是的,服务器将拒绝旧的和无效的令牌.
如果计算机的"唤醒"事件传播到浏览器并在JavaScript API中可用,那就太好了.有谁知道这样的事情是否实施了?
当分钟改变时,我怎么能准确地运行一个功能呢?如果我在分钟更改时立即触发它,则使用setInterval可以工作.但是我担心setInterval会在长时间运行的过程中被事件循环中断而不能与时钟保持同步.
如何在分钟变化时准确运行功能?
我有一个使用jquery的setIntervall()函数无限滑动图像的网站.
在Chrome 13中调用页面时,我切换到另一个选项卡几秒钟后返回,图像滑动发生得更快,好像它试图保持到原来的状态,如果它没有切换到另一个选项卡.
我该如何解决这个问题?
$(window).load(function() {
setInterval(nextSlide, 3500);
});
function nextSlide(){
offset += delta;
$("#slideContent").animate({left: -1 * offset}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
解:
我选择了jfriend00的第一个建议.现在,当窗口变为非活动状态时,我会关闭计时器.
可以在这里找到这样做的简单代码.
我有一个自定义幻灯片对象来执行名称在网站上指示的常用内容.除非我在Chrome中切换标签并返回网站标签,否则一切正常.当发生这种情况时,幻灯片显示会变得疯狂并开始淡化图像而忽略setInterval给定的间隔.找不到与此相关的任何问题,所以我想至少知道代码或软件问题是否存在问题.
这是代码(与jQuery一起使用):
$(function() {
// slideshow
var slideshow = {
id : false,
current : 0,
count : 0,
interval : false,
init : function(data) {
if (!data)
return false;
$.each(data, $.proxy(
function(index, value) {
this[index] = data[index];
}, this)
);
this.count = this.images.length;
for (x=1;x<=this.count;x++)
$('#slider ul.nav').append('<li></li>');
$('#slider ul.nav li').live('click', function()
{
slideshow.click(this);
});
$('#slider ul.nav li:eq(0)').addClass('on');
$('#slider ul.nav').css('width', (15*this.count)+'px');
return true;
},
start : function () {
slideshow.id = setInterval(function() { slideshow.action(); }, slideshow.options.interval);
},
stop …Run Code Online (Sandbox Code Playgroud) 我们在项目中使用require.js,我们需要覆盖第705行中的setTimeout,这是我们需要忽略/忽略这个setTimeout 的代码(我的意思是在它上面运行),这个问题如果我改变了它在开源代码中显式,当我更改版本时,代码将丢失,我应该如何从外部仅为require.js文件覆盖此setTimout并保留它,只要我使用此lib,是否可以在JS全球优雅的方式?
https://github.com/jrburke/requirejs/blob/master/require.js
这是第705行
//If still waiting on loads, and the waiting load is something
//other than a plugin resource, or there are still outstanding
//scripts, then just try back later.
if ((!expired || usingPathFallback) && stillLoading) {
//Something is still waiting to load. Wait for it, but only
//if a timeout is not already in effect.
if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
checkLoadedTimeoutId = setTimeout(function () {
checkLoadedTimeoutId = 0;
checkLoaded();
}, …Run Code Online (Sandbox Code Playgroud) 我注意到我的网络应用存在问题 - 当Chrome激活标签未设置为我的应用时,Chrome会停止运行我的JS代码,直到我再次打开标签.
我想它可以节省CPU周期.否则,如果您打开了20个选项卡并且每个选项卡都运行了代码,那么它将很快变慢.
这一切都很好,但我的应用程序要求它继续在后台运行.它可以实时更新图形并每隔几秒钟分析一次数据.
如果我移动到另一个选项卡,图形更新和分析停止(或变得非常慢 - 1秒现在像20秒).然后,当我再次关注制表符时,它恢复正常速度的更新,但由于这种奇怪的时间稀释,图形和数据分析变得奇怪.
我创建了一个空的 HTML 页面,其中有一个简单的方法setInterval(),通过 无限期地每 30 秒触发一次 AJAX 调用window.fetch()。然而,在 Chrome 中,如果我离开计算机 24 小时然后返回计算机,我会注意到 AJAX 调用在某个时刻停止触发。
请注意,这台计算机不会进入睡眠、休眠、屏幕锁定等状态。换句话说,我离开显示器,第二天回来,看到与前一天完全相同的屏幕,但Chrome 调试器中的“网络”选项卡显示浏览器在某个时刻停止进行 AJAX 调用。
我想知道的是,浏览器是否有某种内部进程或线程管理,可以将“空闲”选项卡置于睡眠状态并停止执行网络调用,或者停止执行 JavaScript 间隔和/或超时?现代浏览器是否有某种资源节约/内存管理功能,将选项卡置于“睡眠”状态,这可以解释这一点?
javascript ×10
setinterval ×4
jquery ×3
settimeout ×2
ajax ×1
node.js ×1
prototype ×1
require ×1
requirejs ×1
sleep ×1