Таймер обновления Javascript/JQuery
-
22-09-2019 - |
Вопрос
У меня есть простая система, которая обновляет 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();
});