‹ 指南

檔案傳輸更快了 v26.1.7+

同一個 8 MB 檔案、同一條連線、同一部手機:原本 54 秒的上傳,現在 4 秒。沒有開關要開。

需要 Term v26.1.7 或更新版本。

撰寫於

你會注意到甚麼

SFTP 瀏覽器裏的上傳快了好幾倍,大檔案的下載也一樣。伺服器愈遠,差距愈明顯——而那正是傳檔案最難受的情況。沒有設定要找:檔案就是變快了。

其餘一切照舊。傳輸依然會顯示進度、依然可以中途取消,也依然只在真正傳完之後才覆蓋對端的檔案——上傳失敗的話,伺服器上原本的東西保持原樣。

數字

一個 8 MB 檔案,傳去一台真實的 OpenSSH 伺服器,鏈路來回延遲 200 ms——大致等於連一台在另一個大洲的伺服器。計時由應用自己完成,同一部手機,前後相隔幾分鐘。

上傳 8 MB
之前 54.3 s · 0.15 MB/s
之後 3.8 s · 2.10 MB/s
快 14.2 倍
下載 8 MB
之前 7.4 s · 1.09 MB/s
之後 2.1 s · 3.74 MB/s
快 3.4 倍

省掉的正是「等」,所以伺服器愈遠、能省的愈多。即使是近處那台本來就不慢的伺服器,也快了約十五倍。

伺服器 上傳(之前) 上傳(之後)
近處(20 ms) 1.06 MB/s 16.1 MB/s
另一個大洲(200 ms) 0.15 MB/s 2.10 MB/s

兩行都是同一個檔案、同樣加在同一台伺服器前面的延遲。200 ms 那一行就是上面圖裏的手機;20 ms 那一行是在電腦上跑的——這麼快的鏈路在電腦上容易安排,在 Wi-Fi 上不好湊。

小於 4 MB 的檔案下載刻意保持不變:單條流本來就已經接近可達的上限,而令大檔案變快的那套辦法用在小檔案上,開銷比省下來的還多。

而且更省電,不是更費電

「更快」通常意味着「更用力」。這裏正好相反。

一樣的位元組,少了等待

傳同一個 8 MB 檔案,要加密的位元組一個都沒少。但這次上傳佔用的處理器時間由 2.2 秒降到 0.33 秒——因為原來那 54 秒裏,應用大部分時間是醒着等伺服器回話,而不是在做事。傳得愈短,就愈省。

下載:一樣的開銷,三分之一的時間

下載之前用掉 0.35 秒處理器時間,之後是 0.36 秒,而速度是原來的三點五倍。要做的事沒變,變的是等待。

原本為甚麼慢

原本的傳輸一次只送出檔案的一小塊,等伺服器確認之後才送下一塊,而且每送一塊都要求伺服器順手寫入硬碟。在每次來回都要花掉五分之一秒的鏈路上,時間幾乎全花在這個等待裏——連線大部分時候是空着的。現在同時有好幾塊在路上,大檔案的下載還會拆成四條並行的流、邊到邊拼回原樣。協定沒變、伺服器沒變,對端也不需要做任何改動。

兩件要說清楚的事

這些是單次運行、單一裝置的結果。一部手機、一個 8 MB 檔案,延遲是加在同一台機器上的伺服器前面,為的是令數字可以重現。你的鏈路不是實驗室:上行慢、Wi-Fi 擁擠、伺服器負載高,都會算進總時間裏;這裏也沒有任何東西能令傳輸快過它所在的那條連線。

在特別差的連線上,你現在可能會看到傳輸直接停下,而不是慢慢爬。讓好幾塊資料同時在路上,需要鏈路撐得住;撐不住時,傳輸會以「伺服器沒有回應」結束,而不是磨上好幾分鐘。伺服器上的檔案保持原樣,換一條好一點的網絡重試就可以。我們寧願直接告訴你這次傳不成,也不想讓它假裝十分鐘。