閱讀約 1 分鐘 windows, 開源

200 毫秒是個神奇的數字

為什麼 bopomofo-decoder 用暫存檔而不是 stdin pipe——以及這件事教會我的 CJK / cp950 / Windows IPC 細節。

當我第一次把 AutoHotkey 接到我的 Python 解碼器時,我用了最直覺的做法: 透過 WScript.Shell.Exec 走 COM 的 stdin/stdout pipe。 在其他 locale 下這應該天然能 work,但在 Windows-Taiwan 區下, cp950 會劫持 pipe 的編碼,把 Python 寫回的 UTF-8 bytes 切碎。 回傳結果變成 ???? ???

解法不是某個聰明的 encoding flag,而是徹底放棄 pipe

AHK 把輸入寫到暫存檔(UTF-8,無 BOM)
Python 讀檔、寫到另一個暫存檔(UTF-8)
AHK 讀回該暫存檔,把結果貼回前景應用程式

兩次 file system 來回多花了大約 50 毫秒,pipe 的話只要 5 毫秒。 但 pipe 在台灣 locale 機器上會 100% 弄壞多 byte 字符——速度再快也是白搭。 先做對,再做快。

整段使用者感知的循環——選取 → 亂碼消失 → 中文貼上——大約 200 毫秒。 比這更快沒有意義,因為人類眼睛的 fixation latency 已經主導感受。 更慢就會開始顯得「卡」,像那種反應遲鈍的瀏覽器自動補全。