Question

J'ai un système simple qui rafraîchit un div toutes les quelques secondes:

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

Maintenant, à cause de ce que le contenu est, il est plus susceptible de mettre à jour à l'heure ou à la demie. (Mais pas toujours). Ce que je voudrais faire faire actualiser le système le plus souvent entre quelques minutes avant et après l'heure (et passé la moitié), juste pour le rendre plus précis.

Est-ce possible / comment pourrais-je le faire sans stresser trop l'ordinateur du client?

Était-ce utile?

La solution

Depuis l'intervalle lui-même va être dynamique, vous allez devoir utiliser setTimeout à la place.

Quelque chose comme ça (non testé):

$(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);
});

Autres conseils

Utilisez setTimeout au lieu de setInterval afin que vous puissiez modifier dynamiquement le moment de l'intervalle suivant. Je ne suis pas sûr de ce que les conséquences sur les performances de la création et la vérification de la date () objet jamais milliseconde dans la période « rapide » serait, mais vous pouvez toujours régler cette fréquence plus près de chaque seconde si son problème.

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();
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top