检测五分钟标记

时间:2015-03-06 16:37:18

标签: javascript timer

我们使用一个图形系统,该系统使用SNMP每隔五分钟就检索一次数据。例如,12:00,12:05,12:10,依此类推。我们将图形检索为图像。问题是浏览器喜欢使用缓存的图像,在删除缓存之前我们无法获得新的图像。我想要做的是生成一个随机标签,以附加到使其独特的图像,因此不使用缓存的图像。我们每次检索到图像时都能生成一个随机标记,但这导致所有请求中的服务器利用率很高,响应时间也较慢。我现在尝试做的是仅在以下情况下生成新标签:

a)自用户检索图像以来已超过四分钟(5+)(因为必须通过五分钟标记),

b)自检索图像以来不到五分钟,但自上次检索图像以来已经过了五分钟。例如,如果一个人在12:04检索图像,他或她将在第一次测试后五分钟之前无法获得新图像,但是第二次测试将认识到如果他在12:05过去了或者她试图在12:06检索图像。

我尝试做的是使用cookie并在每次生成新标记时将cookie设置为新标记。在页面加载时,它将使用cookie的值加载RandomTag变量。 Onclick将确定自RandomTag变量中的时间已过去五分钟,或者自上一代标记以来是否已经过去了五分钟,如果有,则生成新标记,并使用新标记设置cookie;否则标签将保持不变。

任何人都可以检查一下,看看是否有任何问题?我试过这段代码,这让我的页面挂了。我不知道我错过了什么。另外,如果您有更简单的方法,请告诉我。

以下是我的代码示例:

 <body onload="checkCookie()">

 function getCookie(cname) {
     var name = cname + "=";
     var ca = document.cookie.split(';');
     for(var i=0; i<ca.length; i++) {
         var c = ca[i];
         while (c.charAt(0)==' ') c = c.substring(1);
         if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
     }
     return "";
 }

 function setCookie(cname, cvalue, exdays) {
     var d = new Date();
     d.setTime(d.getTime() + (exdays*24*60*60*1000));
     var expires = "expires="+d.toUTCString();
     document.cookie = cname + "=" + cvalue + "; " + expires;
 }

 function checkCookie() {
    randomTag = getCookie("timeTag");
 }

 function tagGet() {
    timeNow = new Date().getTime();
    timeDif = timeNow - randomTag;
    minNow = timeNow.getMinutes();
    minLast = randomTag.getMinutes();
    minDif = minNow - minLast;
    if (timeDif > 29999) { //If 5+ minutes have passed
        randomTag = timeNow;
        setCookie("timeTag", timeNow, 365);
    }
    else if (timeDif < 30000) { //If less than 5 minutes have passed
        if (minDif > 0) { //If at least 1 minute has passed since last random tag generation
            for (y = 0; y < minDif; y++) { //Check to see if a five minute mark has passed by decrementing the current minute mark and comparing it to a five minute mark
                for (z = 0; z < 60; z += 5) { //Increment by five minute marks for comparison ... 0, 5, 10, etc
                    if (minNow == z) { //If the minute mark now matches a five minute mark
                        randomTag = timeNow;    
                        setCookie("timeTag", timeNow, 365);
                    }
                    minNow--; //Decrement minute mark now for comparing next minute mark
                }
            }
        }
    }
 }

 <a href="#" onClick="tagGet()">#</a> //This is generic

2 个答案:

答案 0 :(得分:0)

设置全局变量lastImage,并在请求图像时将其设置为Date()。

如果Date()&gt; = lastImage +(5 * 60 * 1000),则仅检索新图像。

您可以在网址末尾使用Date()来获取唯一标识符以避免缓存。

答案 1 :(得分:0)

确定。我发现了一个非常简单的解决方案。基本上我只是将我的变量设置为等于最后五分钟标记,将当前时间舍入到最后五分钟标记!傻我。答案在这里,除了我减去2.5而不是添加2.5,因为我想找到最后五分钟标记:Javascript: Round Time UP nearest 5 minutes