设备之间直接传文件¶
两台设备连上同一个网络,文件直接从一台到另一台。中间没有服务器,文档站这一侧拿不到任何一个字节。
这一页属于实验区,目的是量数字,不是拿来日常用的工具。
为什么要量这个¶
文档站的离线内容目前只能透过网络更新。QR code 影格串流每秒送一到三 KB,传一份几 MB 的离线内容不成立。
同一个局域网里的直接连线快得多,代价是两台设备要先交换一段描述,而那一步通常靠一台服务器。把那段描述压到够小,就能用 QR code 交换,整条路不需要任何服务器。这一页先量那段描述有多大,以及实际传输有多快。
两台设备怎么测¶
两台连上同一个网络,自己开的热点最可控。
- 两台都按第一区的「开始」,第二区出现各自的 QR code,相机也跟着打开
- 拿其中一台的相机对准另一台的屏幕。扫到的那一台会自动回应,第二区换成回应用的 QR code
- 另一台的相机对准它,扫到就连上了
不必先约定谁发起,谁先扫到谁都可以。第一次打开相机时浏览器会问能不能用相机,允许才扫得了。相机画面在这一页里解码,不会送到任何地方。
第三区可以改用前镜头。两部手机屏幕对屏幕拿着,两边的前镜头同时看得到对方,一来一回在同一个动作里完成。前镜头多半是定焦的,要离多远才读得到,也是这一轮要量的数字。
相机不能用的时候,第二区底下的文字框可以整段复制交给对方,贴进第三区按套用,效果一样。
连上之后任一边都可以送东西过去。收的一端会算 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。每一台各导出一份,收送两侧的耗时才都有。
失败的结果一样有用。判准之一就是「失败要多快说得出来」,卡在转圈三分钟的体验跟直接说不支持,对现场的人差别很大。