滑鼠延遲是指從實體滑鼠動作發生,到軟體對該動作做出回應之間的延遲時間。由於每個可測量的環節——USB 輪詢、驅動程式處理、作業系統處理、瀏覽器事件傳遞,以及應用程式邏輯——都會各自增加延遲,因此延遲很少是一個可以直接從螢幕上讀到的單一數字。在瀏覽器內開始進行延遲調查最快速的實務做法,是先確認每次按鍵確實都有送達網頁。一個從未註冊到的按鈕,從使用者角度來看,延遲實際上是無限大。Mouse Tester將這項初步檢查轉化為單一畫面、無需安裝的程序:將游標放在虛線目標區內,依序按下每個可用的按鈕,觀察具名計數逐次增加,同時瀏覽器會依 MouseEvent.button 代碼為每個事件加上標籤。從這裡出發,你可以判斷問題是出在瀏覽器之下(網頁永遠無法看見的開關、驅動程式或傳輸層),還是介於瀏覽器與你實際感受到延遲的應用程式之間。

滑鼠延遲實際上包含了什麼
當讀者搜尋如何測試滑鼠延遲時,通常預期會得到一個以毫秒為單位的單一數字。實際的輸入延遲至少是五個獨立階段的總和,而網頁只能觀察到最後幾個階段:
- 硬體開關啟動——滑鼠內部微動開關閉合的實體瞬間。
- USB 或無線傳輸——輪詢間隔,決定裝置回報狀態的頻率,常見為 125 Hz、500 Hz、1000 Hz 或更高。
- 裝置驅動程式與作業系統——核心處理、重新對應、輔助功能軟體,或可能在任何網頁看見事件之前就先取用事件的廠商工具。
- 瀏覽器事件傳遞——從原始輸入到網頁可以監聽的 mousedown 事件之間的路徑。
- 應用程式處理——遊戲引擎、設計工具或網頁應用程式邏輯對事件做出回應。
網頁工具無法存取前三個階段,只能回報到達其自身事件監聽器的內容。這正是頁面層級測試之所以作為第一步如此有用的關鍵原因:它將你在瀏覽器中實際能觀察到的鏈結部分隔離出來,並在進入需要不同工具或硬體的時間量測之前,先為每個按鈕提供一個是/否的答案。
為什麼按鍵偵測要優先進行
在量測點擊到達的速度之前,你需要先知道點擊確實有到達。若按下側邊按鈕並未讓頁面上的任何計數增加,那麼你想要測量的延遲數字根本還不存在——沒有事件就沒有時間戳。這就是 Mouse Tester 所填補的缺口。該小工具會建立一個大型目標區,監聽 mousedown 事件,並使用 MouseEvent.button 的標準 Web 對應為每個事件分類:0 Primary、1 Auxiliary、2 Secondary、3 Back、4 Forward。超出該集合的代碼會保留為數值形式的未知項;小數代碼會被拒絕。
目標區會抑制自身的上下文選單與輔助功能啟動,以免次要點擊或中鍵點擊立即取代你正要記錄的結果。計數與最新的八個標籤保留在當前分頁中;不需上傳、不需安裝、不需驅動程式。Reset 會清除記憶體中的工作階段,重新整理或關閉分頁則會徹底移除狀態。
確認瀏覽器接收每一次按鍵
以下是在瀏覽器中用來確認滑鼠上每個可用按鍵都已傳遞至網頁的實務工作流程。
- 在全新的分頁中開啟 Mouse Tester,等待頁面載入完成;虛線目標區應填滿測試區域。
- 將游標移入虛線目標區內,以主要按鈕按一下;確認總計與 Primary 計數都恰好增加 1。
- 在目標區內按下次要按鈕,驗證 Secondary 計數增加 1,而 Primary 計數維持不變。
- 按下滾輪或中鍵按鈕,並檢查 Auxiliary 計數;目標區會抑制常見的預設行為,以免測試自行中斷。
- 按下滑鼠上每個側邊按鈕;當瀏覽器轉發時,Back 與 Forward 應分別產生獨立的具名增量。
- 檢查 Recent 清單,確認瀏覽器實際傳遞事件的順序,而非你以為自己按下它們的順序。
- 重複測試任何可疑的按鈕數次以排除單次不穩定的按壓,然後使用 Reset test 在新一輪測試前清除記憶體中的工作階段。
若要在同一台機器上與作業系統的工作流程相互對照,配套指南 How to Test Mouse Buttons on Windows 11 會逐步說明 Windows 層級的設定面板;兩種檢視方式結合起來,便能判斷無法識別的按壓是在瀏覽器層之前還是被瀏覽器層之後所吸收。
對應五個按鍵代碼
頁面會依整數代碼為每個接受的事件分類。對應方式遵循 Web 平台規範,而非依據按鈕實際位於哪一側的假設。
| 代碼 | 具名標籤 | 常見的實體按鈕 | 通常的作用 |
|---|---|---|---|
| 0 | Primary | 主要啟動按鈕 | 選取、啟動、觸發預設動作 |
| 1 | Auxiliary | 中鍵或滾輪點擊 | 在新分頁中開啟連結、在設計工具中平移 |
| 2 | Secondary | 次要啟動按鈕 | 開啟上下文選單 |
| 3 | Back | 側邊按鈕(後方) | 瀏覽器上一頁、遊戲專屬按鍵綁定 |
| 4 | Forward | 側邊按鈕(前方) | 瀏覽器下一頁、遊戲專屬按鍵綁定 |
| 任何其他整數 | Unknown(數值) | 廠商專屬或重新對應 | 以其原始代碼呈現,不會強迫對應到已知名稱 |
這個表格的重點在於,Primary 是由 Web 模型定義,而非由你的拇指決定。作業系統設定可以對調實體左鍵與右鍵的角色,之後頁面仍會將 0 回報為 Primary,因為依據瀏覽器的定義,那才是主要啟動按鈕。相同的原則也適用於額外的按鈕:觸發瀏覽器上一頁/下一頁的側邊按鈕可能根本不會到達網頁,因為瀏覽器本身會在任何頁面監聽器執行之前先取用該事件。對應方式遵循 MDN 的 MouseEvent.button 參考文件 與 W3C Pointer Events——button 屬性 所描述的 Web 規範。
當按鍵計數停留在零時
刻意按下後任何具名標籤顯示為零,是一個有用的訊號,但並非硬體診斷。它只能告訴你:在測試期間,帶有所預期 MouseEvent.button 代碼的事件並未到達此頁面。在實體開關之上,有好幾個層級可能會在事件成為頁面事件之前先吸收掉該按壓:
- 瀏覽器導覽——上一頁與下一頁按鈕通常由瀏覽器自行處理,永遠不會到達頁面。
- 擴充功能與輔助功能軟體——輸入重新對應工具與輔助工具可能會在監聽器執行之前先取用或改寫事件。
- 驅動程式與作業系統設定——廠商軟體可以重新指派按鈕、停用額外的輸入,或將之交給系統快捷鍵處理。
- 遠端桌面與虛擬化層——這些層級會改變到達監聽器的整數代碼,有時會產生 Unknown 數值,而非預期的標籤。
由於這些層級皆位於頁面之上,因此在目標區內防止預設行為,只能抑制瀏覽器原本會執行的一小組頁面內預設動作。它無法覆寫優先順序更高的系統處理。若想跳脫零結果,請在實際出現問題的應用程式中重複測試,並在可確認裝置認為按下的是哪個實體開關之處,與廠商軟體進行比對。單一瀏覽器分頁中的單一零結果是關於該頁面的證據,而非關於硬體的證據。
Mouse Tester 不會量測什麼
該頁面對其範圍之外的內容坦誠以告。以下項目不在其合約範圍內,網頁若無對裝置的特殊權限便無法量測:
| 類別 | 所需條件 | 瀏覽器頁面無法做到的原因 |
|---|---|---|
| 以毫秒為單位的點擊延遲 | 在頁面之前與之後同步的硬體時間戳記 | 頁面無法存取實體開關動作的瞬間 |
| 輪詢率 | 原始 HID 回報或廠商診斷 | 瀏覽器只會公開合成後的事件,而非原始回報 |
| 彈跳或抖動 | 隨時間進行的高解析度事件錄製 | 頁面觀察的是離散事件,而非開關的振動 |
| 無線傳輸延遲 | 接收端計時或韌體工具 | 無線傳輸路徑對網頁而言不可見 |
| 點擊速度(CPS) | 附帶時間戳記的成對點擊 | 屬於專屬點擊速度頁面的範疇 |
| 滾輪滾動量 | Wheel 事件取樣 | 屬於不同的事件系列,適用於不同的測試頁面 |
上述每一項量測都屬於不同工具、不同合約的範疇。若把該頁面視為能夠證明硬體狀態、遊戲適用性或無線延遲,會誤解它真正的功能。其可靠的合約範圍較窄:解讀到達目標區的 MouseEvent.button 代碼、透明地計算這些事件、保留一份簡短的近期清單,並在軟體於頁面看見之前攔截按壓時清楚發出警告。
將 Recent 清單作為訊號來解讀
由於頁面僅保留最近八個接受的標籤,Recent 清單同時也充當快速的完整性檢查。若你預期的順序是 Primary、Secondary、Back、Forward,而 Recent 清單顯示的是 Back、Back、Back、Back,你便立即得知:瀏覽器正在將該單次「上一頁」按壓重新發出四次,或該按鍵正在發生機械性抖動。這個清單能讓順序一目了然;當你想要找出規律時,它比單一累計總計更為有用。
當刻意按下後近期清單為空,這與計數為零所代表的訊號相同:在工作階段期間,沒有相符的事件到達目標區。將該清單視為一份簡短的稽核紀錄,而非永久的歷史紀錄,也符合此工具的真正限制——重新整理分頁或選擇 Reset test 會移除記憶體中的狀態,且不會在當前頁面之外的地方上傳或儲存任何內容。結合 Recent 清單、各按鈕計數,以及在重新測試前先執行一次 Reset,即可獲得一個可在無需安裝任何東西的情況下,向廠商說明或在不同瀏覽器之間比較、且可重現的純瀏覽器工作階段。