線上秒錶
精確的線上秒錶,支援計圈、分段時間、鍵盤快捷鍵和一鍵複製成績列表。使用單調時鐘,後臺標籤頁被節流也不會走偏。
不會走偏的秒錶。 用按鈕或鍵盤開始、暫停和計圈。每一圈同時記錄本圈用時和累計總時,整份列表可以一次性複製出去。
空格開始 / 暫停,L 計圈,R 重置。
還沒有記錄任何圈次。
精確的線上秒錶,支援計圈、分段時間、鍵盤快捷鍵和一鍵複製成績列表。使用單調時鐘,後臺標籤頁被節流也不會走偏。
不會走偏的秒錶。 用按鈕或鍵盤開始、暫停和計圈。每一圈同時記錄本圈用時和累計總時,整份列表可以一次性複製出去。
空格開始 / 暫停,L 計圈,R 重置。
還沒有記錄任何圈次。
做秒錶最直覺的方式是每次定時器觸發就往計數器上加一個固定值。這也是錯誤的方式,因為瀏覽器裡的定時器並不保證按時觸發。切到別的標籤頁,間隔會被節流到每秒一次甚至完全暫停;合上筆記本,它就徹底停了。用這種方式做出來的計數器會丟時間,而且丟了就再也補不回來。
本秒錶的做法是記錄開始的那一刻,然後在每次重繪時用當前時刻減去它。沒有任何東西在累加,因此也就沒有任何誤差可以累積。標籤頁被節流時顯示會停止重新整理,但底層時鐘照常前進,你切回來後的第一幀顯示的就是正確的已用時間,而不是一個在你離開期間落後了的數字。
這裡使用的是 performance.now(),它從頁面載入開始計數,並且只會向前走。這一點很重要,因為牆上時鐘——也就是 Date.now() 報告的時間——是會跳變的。NTP 校正會微調它,夏令時切換會移動它,使用者改一下系統時間就能讓它在任意方向上跳幾個小時。
從牆上時鐘讀數的秒錶會完整繼承這些跳變。如果一次 NTP 同步恰好發生在測量過程中,你記錄的間隔就是錯的,而介面上不會有任何跡象提示你。單調時鐘沒有這種失效模式:它不與任何東西同步,無法被調整,它唯一測量的就是流逝的時間。
每一行記錄兩個數字。累計是從開始到該圈的時間,本圈是距上一圈的時間。它們回答的是不同的問題,搞清楚自己在看哪一個很有必要。
給跑者計八圈時,本圈時間告訴你他是在保持配速、掉速還是在衝刺——這是每一圈的表現。累計時間告訴你他相對於全程目標成績處在什麼位置。只看累計時很難發現掉速,因為每個數字都包含了它之前的全部時間;只看本圈又會丟掉整體結果。兩個都顯示,你就能在同一張表裡同時讀出配速和進度,匯出的內容也保留了這兩列,方便貼上到任何地方。