0

我有

  1. 1-数据库中的多个单元
  2. 每个单元都有自己的更新时间(以秒为单位)
  3. 具有动态内容的网页
  4. 目前每次调用时都会嵌入自动刷新(2分钟),见下文

function refreshPage(){

minutes = 2;
seconds = 0;  
interval=120000;
getCheckedUnits(); //call to function that checks and updates stuff

}

function timedRefresh(timeoutPeriod) {
    //refreshPage();
    setInterval(refreshPage, timeoutPeriod);
    countdown('countdown');
}

var interval;
var minutes = 2;
var seconds = 0;

function countdown(element) {
    interval = setInterval(function() {
        var el = document.getElementById(element);
        if(seconds == 0) {
            if(minutes == 0) {
                el.innerHTML = "Waiting for refresh";
                clearInterval(interval);
                return;
            } else {
                minutes--;
                seconds = 60;
            }
        }
        if(minutes > 0) {
            var minute_text = minutes + (minutes > 1 ? ' minutes' : ' minute');
        } else {
            var minute_text = '';
        }
        var second_text = seconds > 1 ? 'seconds' : 'second';
        el.innerHTML = 'Page will auto-refresh in: ' + minute_text + ' ' + seconds + ' ' + second_text + ' remaining';
        seconds--;
    }, 1000);
}

我需要做的是使其对用户透明并根据需要调用更新(我有在数据库中设置的值)。

作为一种解决方案(在 JS-Ajax 中),我可以使用与上面相同的计时器(将其设置为 5 秒)并创建一个包含存储 id、上次更新时间和下次更新时间的对象的数组。然后我只能在当前时间大于下一次更新时间时更新每个对象。或者我可以通过 cron-job 来处理这个方法。

我以前从未这样做过,我想听听基于经验的意见。什么是最好的选择?

4

1 回答 1

0

您在获取更大数据之前获取最后更新时间并进行比较的方案是解决此问题的一种完全有效的方法,但您可以考虑其他方法。特别是,您正在尝试实现的称为服务器推送。使用最后更新的时间戳可以近似于此,但诸如长轮询和(在未来/某些浏览器中)WebSockest 等替代技术是一些替代方法。

Here is a better writeup to a similar question

于 2013-01-18T23:34:53.477 回答