我们使用一个图形系统,该系统使用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
答案 0 :(得分:0)
设置全局变量lastImage,并在请求图像时将其设置为Date()。
如果Date()&gt; = lastImage +(5 * 60 * 1000),则仅检索新图像。
您可以在网址末尾使用Date()来获取唯一标识符以避免缓存。
答案 1 :(得分:0)
确定。我发现了一个非常简单的解决方案。基本上我只是将我的变量设置为等于最后五分钟标记,将当前时间舍入到最后五分钟标记!傻我。答案在这里,除了我减去2.5而不是添加2.5,因为我想找到最后五分钟标记:Javascript: Round Time UP nearest 5 minutes