检测五分钟标记

Detect Five Minute Mark

本文关键字:五分钟 检测      更新时间:2023-09-26

我们使用一个图形系统,该系统使用SNMP每隔五分钟检索一次要绘制图形的数据。例如,12:00、12:05、12:10等等。我们将图形作为图像检索。问题是浏览器喜欢使用缓存的图像,在删除缓存之前,我们无法获得新的图像。我想做的是生成一个随机标签,将其附加到图像上,使其具有唯一性,因此不使用缓存的图像。我们能够在每次检索图像时生成一个随机标签,但这导致所有请求都会占用大量服务器,响应时间也会变慢。我现在试图做的是生成一个新标签,前提是:

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

b) 从检索到图像不到五分钟,但从上次检索到图像已经过去了五分钟。例如,如果一个人在12:04检索图像,他或她在第一次测试五分钟后才能获得新的图像,但如果他或她试图在12:06检索图像,第二次测试将识别出12:05通过。

我尝试使用cookie,并在每次生成新标签时将cookie设置为新标签。在页面加载时,它将加载带有cookie值的RandomTag变量。点击后,将确定自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

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

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

您可以在url末尾使用Date()作为唯一标识符,以避免缓存。

好的。我找到了一个非常简单的解决方案。基本上,我只需要将当前时间四舍五入到最后五分钟,就可以将变量设置为等于最后五分钟!真傻。答案就在这里,只是我减去了2.5,而不是加了2.5,因为我想找到最后五分钟的标记:Javascript:Round Time UP最接近5分钟