🛝Toolio
À propos Contact

⏱️ Chronomètre en ligne avec minuteur de tours

Appuyez sur Démarrer et l'outil ne découpe pas littéralement des morceaux de temps en trente millisecondes. Il enregistre la lecture exacte de performance.now() au moment où vous appuyez sur Démarrer, puis, à chaque rafraîchissement, il soustrait ce nombre stocké du nombre actuel pour obtenir le temps écoulé — recalculé à chaque fois, et non accumulé. Cette distinction est importante, car les navigateurs ralentissent délibérément setInterval dans les onglets au second plan pour économiser la batterie, ce qui est la méthode classique par laquelle les chronomètres maison dérivent ou perdent des secondes. Puisque ce chronomètre dérive toujours son nombre à partir d'une différence de timestamp plutôt que de compter le nombre de ticks effectivement déclenchés, le temps affiché revient immédiatement à la valeur correcte dès que vous revenez à l'onglet, même après plusieurs minutes d'absence.

Le chronomètre est un chronomètre de course gratuit dans le navigateur qui suit le temps écoulé en comparant l'horloge monotone performance.now() avec un timestamp de début stocké, au lieu de compter les ticks setInterval, afin que le nombre affiché reste précis même lorsque le navigateur ralentit les mises à jour de l'écran de l'onglet.

00:00.00

Confidentiel par conception. Cet outil fonctionne entièrement dans votre navigateur — rien de ce que vous saisissez n'est téléversé ni stocké, et il marche hors ligne.

À propos

En interne, il y a trois états : une valeur accumulée `elapsed` en millisecondes, un `startAt` qui est une capture de `performance.now()` prise au moment où vous appuyez sur Démarrer, et un indicateur booléen `running`. La fonction qui produit le nombre affiché est simplement `elapsed` plus, si `running` est vrai, la différence entre le moment actuel et `startAt`. Un `setInterval` appelle cette fonction toutes les 30 millisecondes uniquement pour rafraîchir l'affichage — l'intervalle lui-même ne contient aucune information de timing, c'est juste un déclencheur de rafraîchissement. C'est la bonne façon de construire un chronomètre, et cela évite directement le bug courant où un minuteur ajoute un incrément fixe à chaque tick et dérive progressivement une fois que les ticks sont retardés, sautés ou regroupés.

Ce choix de conception est également ce qui se produit lorsque vous basculez vers un autre onglet. Les navigateurs ralentissent les chronomètres des onglets au second plan pour économiser le CPU et la batterie — un `setInterval` configuré pour chaque 30 ms peut être retardé à une fois par seconde ou plus lentement pendant que l'onglet n'est pas visible. Sur ce chronomètre, cela n'affecte que la fréquence à laquelle le nombre à l'écran est rafraîchi ; la mathématique sous-jacente (timestamp actuel moins timestamp de début, plus ce qui a déjà été accumulé) ne tient pas compte du nombre de rafraîchissements sautés. Revenez à l'onglet et la prochaine rafraîchissement affiche exactement le temps écoulé correct — rien n'est perdu ou gagné par le ralentissement, seulement la fluidité de l'affichage des secondes pendant que vous regardiez autre chose.

L'utilisation de `performance.now()` au lieu de `Date.now()` est également la bonne primitive pour cette tâche, et non un détail incident. `Date.now()` reflète l'horloge murale de votre système, et les horloges murales peuvent sauter — par exemple, après qu'un ordinateur se réveille d'un sommeil et se resynchronise avec un serveur NTP, un changement manuel de l'horloge, ou une mise à jour d'heure d'été peuvent faire sauter `Date.now()` vers l'avant ou même vers l'arrière pendant une session. `performance.now()` est défini comme une horloge monotone : elle ne compte que vers le haut à un rythme constant et n'est pas affectée par ces corrections, ce qui est exactement la garantie dont a besoin un chronomètre et que n'a pas un simple minuteur basé sur l'horloge murale.

La limite honnête est la persistance, et il n'y en a aucune. Cette version garde `elapsed` et l'array `laps` comme des variables JavaScript ordinaires en mémoire de la page — il n'y a aucun appel dans la source vers localStorage ou vers l'assistant `Playground.store()` de ce site que d'autres outils Toolio utilisent pour survivre à un rechargement. Cela signifie que le rafraîchissement de la page, la fermeture de l'onglet ou le clic vers un autre outil efface instantanément et définitivement votre temps en cours et chaque course enregistrée. Il n'y a pas de "reprendre la dernière session", rien ne se synchronise entre les appareils, et rien à sauvegarder, car rien n'est jamais écrit en stockage dès le départ. Si l'historique des courses est réellement important pour vous — un journal d'entraînement, un ensemble de temps de présentation — notez les chiffres ou prenez une capture d'écran avant de naviguer ailleurs, car cette page n'en gardera pas trace pour vous.

Comment l'utiliser

  1. Cliquez sur « Démarrer » — le bouton se relabelle immédiatement en « Pause » et l'horloge à l'écran commence à monter en temps réel, en rafraîchissant toutes les 30 millisecondes.
  2. Cliquez sur « Course » à tout moment pendant que le chronomètre est en cours pour capturer le temps écoulé actuel ; la nouvelle entrée est fixée en haut de la liste des courses et affiche à la fois sa fraction (temps depuis la course précédente) et son total cumulé.
  3. Cliquez sur le même bouton à nouveau, maintenant étiqueté « Pause », pour figer l'affichage — le temps écoulé est conservé internement, rien n'est perdu, et le bouton revient à « Démarrer ».
  4. Cliquez à nouveau sur « Démarrer » pour reprendre le comptage exactement là où vous l'aviez laissé, et non à partir de zéro.
  5. Cliquez sur « Réinitialiser » pour remettre à zéro l'affichage, effacer toutes les courses enregistrées et restaurer les deux boutons à leurs étiquettes initiales — c'est aussi la seule façon de commencer une nouvelle session, car il n'y a pas de fonctionnalité de sauvegarde pour protéger l'ancienne.

FAQ

Comment ce chronomètre mesure-t-il réellement le temps en interne ?
Il lit `performance.now()` une fois, au moment exact où vous appuyez sur Démarrer, et stocke ce nombre. À partir de ce moment, la valeur à l'écran est simplement « le temps déjà accumulé » plus « le temps actuel de `performance.now()` moins le timestamp de début stocké » — recalculé à chaque fois sur chaque rafraîchissement de 30 ms. Il n'ajoute jamais simplement un +30 ms fixe à un total en cours sur chaque tick, ce qui est le raccourci qui fait que beaucoup de chronomètres maison dérivent progressivement.
Qu'est-ce qui arrive au temps si je bascule vers un autre onglet du navigateur pendant qu'il est en cours ?
Les onglets en arrière-plan sont ralentis — le navigateur peut retarder un `setInterval` de 30 ms jusqu'à une fois par seconde ou plus lentement pour économiser le CPU et la batterie, donc le nombre à l'écran peut sembler figé ou sauter pendant que vous n'y êtes pas. Mais comme ce chronomètre calcule toujours le temps écoulé comme une différence de timestamp et non comme le nombre de ticks déclenchés, revenir à l'onglet fait en sorte que la prochaine rafraîchissement affiche exactement le temps écoulé correct. Vous ne perdez ni ne gagnez de temps à cause du ralentissement — seulement la fluidité visuelle souffre pendant que vous n'êtes pas là.
Pourquoi `performance.now()` au lieu de `Date.now()` — est-ce vraiment important ?
Oui. `Date.now()` reflète l'horloge murale de votre système, qui peut sauter vers l'avant ou vers l'arrière — par exemple, juste après qu'un ordinateur se réveille d'un sommeil et se resynchronise avec un serveur NTP, ou si l'horloge du système est modifiée manuellement. `performance.now()` est une horloge monotone qui ne cesse d'augmenter à un rythme constant et est immunisée contre ces corrections, ce qui est exactement la propriété dont a besoin un chronomètre et que cette version utilise correctement.
Est-ce que ce chronomètre sauve mon temps écoulé ou mon historique de courses quelque part ?
Non — et contrairement à d'autres outils Toolio, il n'utilise pas du tout le localStorage du navigateur pour ce type de données. Tout ce que vous voyez existe uniquement en mémoire de la page tant que cet onglet spécifique reste ouvert. Rafraîchissez la page, fermez l'onglet ou naviguez vers un autre outil, et votre temps écoulé et toutes vos courses disparaissent définitivement ; il n'y a aucun annulation et aucun sauvegarde automatique, car rien n'est jamais écrit en stockage dès le départ. Notez les chiffres ou prenez une capture d'écran avant de partir si vous avez besoin d'un enregistrement.
Y a-t-il une limite sur les courses, et qu'est-ce que les deux chiffres de chaque ligne de course signifient ?
Il n'y a pas de limite — la liste continue simplement de s'agrandir, avec la dernière course fixée en haut. Chaque ligne affiche deux chiffres : la fraction, en couleur d'accent, qui est le temps écoulé depuis votre course précédente ; et le total, en gris, qui est le temps cumulé depuis que vous avez appuyé sur Démarrer. Ce couple permet d'évaluer un segment individuel — un intervalle d'entraînement, une section d'une présentation — sans perdre le suivi du temps total.
Cet outil téléverse-t-il mes données ?
Non. Tout s'exécute dans votre navigateur, vos données ne quittent jamais votre appareil — et une fois la page chargée, cela marche même hors ligne.