跳轉到

裝置之間直接傳檔

兩台裝置連上同一個網路,檔案直接從一台到另一台。中間沒有伺服器,文件站這一側拿不到任何一個位元組。

這一頁屬於實驗區,目的是量數字,不是拿來日常用的工具。

為什麼要量這個

文件站的離線內容目前只能透過網路更新。QR code 影格串流每秒送一到三 KB,傳一份幾 MB 的離線內容不成立。

同一個區網裡的直接連線快得多,代價是兩台裝置要先交換一段描述,而那一步通常靠一台伺服器。把那段描述壓到夠小,就能用 QR code 交換,整條路不需要任何伺服器。這一頁先量那段描述有多大,以及實際傳輸有多快。

兩台裝置怎麼測

兩台連上同一個網路,自己開的熱點最可控。

  1. 兩台都按第一區的「開始」,第二區出現各自的 QR code,相機也跟著打開
  2. 拿其中一台的相機對準另一台的螢幕。掃到的那一台會自動回應,第二區換成回應用的 QR code
  3. 另一台的相機對準它,掃到就連上了

不必先約定誰發起,誰先掃到誰都可以。第一次打開相機時瀏覽器會問能不能用相機,允許才掃得了。相機畫面在這一頁裡解碼,不會送到任何地方。

第三區可以改用前鏡頭。兩支手機螢幕對螢幕拿著,兩邊的前鏡頭同時看得到對方,一來一回在同一個動作裡完成。前鏡頭多半是定焦的,要離多遠才讀得到,也是這一輪要量的數字。

相機不能用的時候,第二區底下的文字框可以整段複製交給對方,貼進第三區按套用,效果一樣。

連上之後任一邊都可以送東西過去。收的一端會算 SHA-256 跟來源比對,數字一致才算這一次成功。

三台以上

第三台不必跟每一台都掃一次,跟已經連上的任何一台互掃就好。連上之後,裝置之間會交換各自連著哪些裝置,還沒連上的兩台由中間那一台轉交連線描述,自動補上連線。第四區標出每一條連線是掃 QR code 連上的,還是經由哪一台介紹。

送東西時會同時送給每一台已經連上的裝置,第五區分開列出每一台的耗時與比對結果。同一個 Wi-Fi 頻道由幾台分著用,每一台的速度會比一對一時慢,慢多少也是要量的數字。

比較吞吐量

第五區底下有三個傳輸參數:每塊大小、每條連線的通道數、並行連線數,預設是 64 KB、1 通道、8 連線。每次只改一個,其餘維持預設,兩端的紀錄都會記下這一次用的參數,整理時才看得出是哪一個參數有影響。

並行連線是在同一對裝置之間多開幾條連線。2026-09-25 用 iPhone 15 Pro 對 Mac 上的 Chrome 實測,iPhone 送出 100 MB 時,1 條連線每秒 4.8 MB,3 條約 16.5 MB,幾乎照條數等比例增加。同一條連線裡多開通道、改每塊大小都沒有差別,所以限制是跟著每一條連線走的。同一天在家用 Wi-Fi 6(5 GHz)上再量一輪,iPhone 送出時每條連線固定約每秒 5.5 到 6 MB,6 條約 33 MB,往返時間一直在 20 ms 以下。Mac 送出從 3 條起就停在每秒 53 到 55 MB,那是這個網路的上限。再往上量,iPhone 送出 8 條每秒約 37 MB、12 條約 41 MB,每條分到的越來越少。12 條只比 8 條快一成,剛開好時的第一次傳輸卻慢最多,預設因此停在 8 條。

剛開好額外連線後的第一次傳輸明顯偏慢,8 條時 Mac 送給 iPhone 的 100 MB 從 2 秒變成 9 到 13 秒。實測排除了「連線開著放一段時間就好」:開好之後放 7 到 14 秒,第一次照樣慢。新連線上先流過資料才有用,每條連線預熱 1 MB 時,第一次縮到 3.5 秒,還沒到第二次的 2 秒。「預熱」選單用來找要預熱多少才夠,可以選每條連線 1、4、16 MB,在配對完成的當下於背景進行。兩台都選好再配對,送檔時比較第一次的速度。換另一個預熱量時,選好之後按「收掉額外的連線」,兩台之間另外開的連線會全部收掉,下一次送出或預熱再重開一批,不必重新整理,也不必重新配對。紀錄裡的 rttMs 是往返時間,localNet 與 remoteNet 是兩端位址的類別(區網、mDNS、Tailscale 等),只記類別,不記位址。

量之前,先在同一個網路上量一次一般的檔案下載,例如在電腦上執行 python3 -m http.server,用手機下載一個大檔案,那個速度大約就是這個網路的上限。這一頁的數字遠低於它時,調整參數才有意義。

已知會失敗的情況

公共 Wi-Fi 普遍開啟裝置隔離,同一個網路裡的裝置連不到彼此,而那正好是最需要這個功能的場合。遇到這種網路,套上對方的回應之後 15 秒還沒連上,第三區會說明連不上,並建議改用自己開的熱點。

Tor Browser 把 WebRTC 整個關掉,因為它會洩漏你真正的 IP。那個版本開不了這一頁的功能。

企業網路與部分訪客網路會擋掉多播,瀏覽器用來認出對方的 .local 名稱因此解析不到。

這一頁不送任何資料

頁面沒有 fetch、XMLHttpRequest、sendBeacon 與 WebSocket,也不載入外部資源。連線設定裡沒有 STUN 也沒有 TURN,連得上就是靠同一個區網裡的候選位址。

檔案內容只在連上的裝置之間流動,經由介紹建立連線時,連線描述也只經過已經連上的那一台。匯出紀錄的時候,IP 與 mDNS 名稱會先遮掉再寫進檔案。

測完請回報

傳之前先在第五區那一欄填上這次的環境,例如「自架熱點,Mac Chrome 對 iPhone Safari」。那一行會跟著每一筆紀錄一起匯出,之後整理結果時才對得起來。

紀錄存在這個分頁裡,重新整理後還在,關掉分頁或按「清除紀錄」才會清掉。按「匯出紀錄」存下 JSON,貼到 issue #553。每一台各匯出一份,收送兩側的耗時才都有。

失敗的結果一樣有用。判準之一就是「失敗要多快說得出來」,卡在轉圈三分鐘的體驗跟直接說不支援,對現場的人差別很大。