鍵盤延遲:延遲從哪來,又是怎樣測出來的
鍵盤延遲是從手指開始按下按鍵,到鍵盤把這次按鍵傳送給電腦之間的時間。它在四個環節中累積:按鍵行程、鍵盤掃描按鍵、防抖和 USB 輪詢。沒有任何網站能測出鍵盤延遲,因為瀏覽器要等鍵盤發出按鍵之後才會得知。評測者用電磁鐵按下按鍵,再用 USB 分析儀記錄這次按鍵離開鍵盤的時間。要降低鍵盤延遲,可以使用更短的觸發鍵程、最高的回報率,以及不會讓按鍵重複輸入的最低防抖設定。
一次按鍵在電腦收到之前要在哪裡等待
- 按鍵行程按鍵向下移動到開關觸發的位置
- 掃描鍵盤晶片逐行檢查按鍵網格
- 防抖等開關觸點停止彈跳,或者忽略彈跳
- USB 輪詢按鍵要等到電腦下一次向鍵盤詢問新輸入
合起來:鍵盤延遲
網頁只能從這裡開始計時
電腦和螢幕 遊戲使用這次按鍵並繪製一幀,螢幕再顯示出來:這是輸入延遲的其餘部分
延遲從哪來
- 按鍵行程。按鍵到達觸發點之前,什麼都不會發生。用每秒 240 幀拍攝時,一次正常按鍵要 4 到 8 幀才能按到底,單是行程就很容易增加 10 ms。那次測試中最快的鍵盤,行程也比其他鍵盤短得多。
- 掃描。大多數鍵盤把按鍵接成網格,並逐行檢查。掃描較慢的鍵盤,可能在開關閉合幾毫秒之後才發現你按了鍵。
- 防抖。開關觸點閉合時會短暫彈跳。鍵盤要麼立即報告按鍵並忽略彈跳,要麼等觸點穩定下來再報告。許多客製化鍵盤使用開源韌體 QMK,它的預設防抖時間是 5 ms。
- USB 輪詢。電腦按回報率向鍵盤詢問是否有新輸入。剛好在一次輪詢之後按下的鍵,要等到下一次輪詢。
回報率換算成毫秒
兩次輪詢之間的時間等於 1,000 ms 除以回報率。平均來說,一次按鍵要等這段時間的一半。
| 回報率 | 輪詢間隔 | 平均等待 |
|---|---|---|
| 125 Hz | 8 ms | 4 ms |
| 250 Hz | 4 ms | 2 ms |
| 500 Hz | 2 ms | 1 ms |
| 1000 Hz | 1 ms | 0.5 ms |
| 8000 Hz | 0.125 ms | 0.0625 ms |
從 125 Hz 提高到 1,000 Hz,平均能節省 3.5 ms。實測鍵盤之間的差距遠比這大:2017 年 Dan Luu 測了 21 款鍵盤,結果在 15 到 60 ms 之間,其中兩款遊戲鍵盤並不比其他鍵盤快。
鍵盤延遲是怎樣測試的
- 電磁鐵和 USB 分析儀。RTINGS 和 LTT Labs 用電磁鐵按下按鍵,標記它碰到按鍵的時刻,再用 USB 分析儀記錄這次按鍵離開鍵盤的時間。RTINGS 取 200 次按鍵的平均值。兩家都會先把鍵盤調到最快的設定,比如最低的防抖和最高的回報率。
- 每種連線方式分開測。LTT Labs 分別測量有線、2.4 GHz 無線和藍牙,因為不同連線方式的延遲可能相差很大。
- 邏輯分析儀。Dan Luu 用它測量從開始按鍵到產生對應 USB 資料包之間的間隔。
- 在家可以用相機或光感測器。用慢動作同時拍下按鍵和螢幕(每秒 240 幀,即每 4.2 ms 一幀),或者在螢幕上放一個光感測器,例如開源的 OSLTT。兩種方法測的都是從按鍵到螢幕的整條鏈路,而不只是鍵盤。
為什麼沒有網站能測試鍵盤延遲
瀏覽器要等鍵盤發出按鍵、電腦再把它轉交過來之後,才會得知這次按鍵,所以本頁描述的所有環節,在網頁開始計時之前就已經發生了。從出現訊號到你按下按鍵的計時測試,測的是你的反應,而反應所需的時間遠比鍵盤長。瀏覽器能檢查的,是每個鍵是否都能被識別、能同時按下幾個鍵(用鍵盤測試),以及按鍵是否會重複輸入(用鍵盤雙擊測試)。
如何降低鍵盤延遲
- 把回報率調到最高。前提是廠商的軟體提供這個設定。
- 調低防抖。如果軟體允許調整,就調低,但要停在不會讓按鍵重複輸入的最低設定。如果開始出現重複字母,請看鍵盤為什麼會打出重複字母。
- 縮短觸發鍵程。磁軸鍵盤和模擬輸入鍵盤可以設定按鍵按下多深才算觸發。Wooting 等鍵盤上的 Rapid Trigger 還能讓按鍵在你開始抬起的那一刻就鬆開,並在你重新按下的那一刻再次觸發。
- 玩遊戲時選最快的連線方式。如果你的鍵盤支援多種連線方式,就用評測中測得最快的那一種。
- 然後再看鏈路的其他部分。幀率和顯示器帶來的延遲通常比鍵盤更多:請看如何降低輸入延遲。
線性軸、段落軸和有聲軸有什麼區別,以及廠商給出的觸發鍵程和觸發壓力,見鍵盤軸體。
資料來源:Dan Luu(英文),鍵盤延遲;RTINGS(英文),鍵盤延遲測試方法;LTT Labs(英文),Labs 如何進行鍵盤測試;QMK(英文),防抖演算法;Wooting(英文),如何設定 Rapid Trigger;OSLTT(英文),開源延遲測試工具。