Вопрос

У меня есть простая система, которая обновляет div каждые несколько секунд:

$(document).ready(function() {
         $("#nownext").load("response.php");
       var refreshId = setInterval(function() {
          $("#nownext").load('response.php?randval='+ Math.random());
       }, 20000);
    });

Теперь, из-за содержания, оно, скорее всего, будет обновляться в час или в полвторого.(Хотя не всегда).Я хотел бы сделать так, чтобы система обновлялась БОЛЬШЕ между несколькими минутами до и после часа (и половины прошлого), просто чтобы сделать ее более точной.

Возможно ли это/как мне это сделать, не слишком нагружая компьютер клиента?

Это было полезно?

Решение

Поскольку сам интервал будет динамическим, вам придется использовать setTimeout вместо.

Что-то вроде этого (непроверено):

$(document).ready(function() {
    $("#nownext").load('response.php?randval='+ Math.random());
    var minutes = new Date().getMinutes(), interval = 60*10*1000; // default 10 mins
    if (minutes <= 10 || (minutes > 30 && minutes < 35) || minutes > 50) {
        // update once-per-minute if within the first/last 10mins of the hour, or 5mins within the half hour
        interval = 60*1000;
    }
    setTimeout(arguments.callee, interval);
});

Другие советы

Используйте setTimeout вместо setInterval, чтобы вы могли динамически изменять время следующего интервала.Я не уверен, каковы будут последствия для производительности создания и проверки объекта Date() за каждую миллисекунду в «быстром» периоде, но вы всегда можете настроить эту частоту ближе к каждой секунде, если это проблема.

start_timer = function(timing) {
   var timer, d = new Date(), min = d.getMinutes(),
     timeout = 20000; /* slow timeout */
   if((min >= 28 && min <= 30) || min >= 58) {
     timeout = 100; /* fast timeout */
   }
   timer = setTimeout(start_timer, timeout);
   // Call your code here.
};

$(document).ready(function() {
    start_timer();
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top