Question

Je suis en train de créer un compte à rebours qui est basé sur un temps sur le serveur.

J'avais initialement le serveur définir le temps restant, et a juste fait un setTimeout pendant 1 seconde qui décrémenter le temps.

J'ai trouvé 2 problèmes avec ceci:

  1. Il y a un décalage à partir du serveur de régler l'heure jusqu'à ce que la page du client est rendu et le JavaScript commence à courir. Le montant du retard dépend de la vitesse de la connexion Internet de l'utilisateur et l'ordinateur / moteur JavaScript.
  2. Je pense que setTimeout de 1 seconde peut avoir été à la traîne un peu sur les ordinateurs plus lents.

Je l'ai changé pour que le serveur fixerait l'heure de fin et le JavaScript sur le client prendrait le temps (UTC) et calculer le temps restant. Il serait alors le faire sur chaque rappel setTimeout. Cela rend le temps et parfait du compte à rebours. Si le client dispose d'un moteur informatique / JavaScript rapide, les séjours de minuterie à la page. Si le moteur informatique / JavaScript est plus lent, vous pouvez voir un deuxième programme omettra ici et là, mais le temps est jamais le jour.

J'ai trouvé 1 problème avec cette méthode jusqu'à présent:

  1. L'horloge de chaque client peut être différent.

Alors, le temps restant peut être quelques secondes ou 30 secondes, ou même des jours hors si le temps des clients n'est pas correct sur leur ordinateur.

Est-il possible que je puisse avoir le temps restant être exacte en fonction de la date de fin du serveur?

Était-ce utile?

La solution

Je ne sais pas quel genre de résolution dont vous avez besoin, mais un réseau donné et le rendu des pages latences, il va être impossible d'obtenir un accord client-serveur à beaucoup mieux qu'une seconde. Je vous suggère de faire un sondage ajax tous les 5 ou 10 secondes, et réglez votre minuterie en conséquence. Il y a aussi comète de href="http://en.wikipedia.org/wiki/Comet_%28programming%29" qui est essentiellement « inverse » ajax, ce qui peut pousser les temps au client. Mais de toute façon, vous avez encore le réseau et renderign latences à combattre.

scroll top