一个 177MB 的重复下载,听起来不像大新闻。

但放到浏览器端 AI 里,它很要命。

Hugging Face 的一篇客座文章用 Transformers.js 做了演示:自动语音识别示例默认用 Xenova/whisper-tiny.en。你在一个站点打开,模型和 Wasm 下载、缓存。换到另一个 origin,哪怕文件字节完全一样,浏览器也可能再下一遍。

文章里的重复存储,到了 177MB。

这不是浏览器犯傻。它是在保护你。问题是,本地 AI 把几十 MB、几百 MB 的模型搬进浏览器后,隐私隔离和资源复用开始正面撞车。

重复下载,是缓存分区的代价

这件事的关键,不在 Transformers.js 本身。

它只是把问题照出来了。

资源文章里的锚点问题
ASR 模型Xenova/whisper-tiny.en不同 origin 下可能重复下载,示例出现 177MB 重复存储
Wasm 运行时ort-wasm-simd-threaded.asyncify.wasm,约 4,733KB不同模型也可能共用同一个 ONNX Runtime Wasm,但跨源仍可能重复
浏览器缓存Chrome 缓存键包含 Network Isolation Key同 URL 不等于同缓存命中

现代浏览器做缓存分区,是为了堵隐私洞。

如果缓存完全按 URL 共享,一个网站就可能通过请求耗时,猜出你是否访问过某些资源。再往前一步,就可能推断浏览历史、登录状态或兴趣画像。

所以 Chrome 的缓存键不只看资源 URL,还会看 Network Isolation Key。通常和 top-level site、current-frame site 有关。

结果就是:两个站点都从同一个 CDN 拉同一个 Wasm 文件,URL 一样,文件一样,但隔离键不同,缓存可能不共享。

这套设计没错。

错位发生在资源体积变了。过去网页资源轻,重复一点还能忍。现在模型进浏览器,一次重复就是几十 MB、上百 MB。

开发者会先感到疼。

做 Web AI demo、插件、教育工具、轻量 SaaS 的团队,不能再默认“放 CDN 就能大家共享”。短期能做的更现实:压模型、固定版本、减少模型切换、把首屏体验做得更诚实。别把首次加载伪装成普通网页加载。

用户也会感到疼,只是更晚一点。

手机热点、低端笔记本、企业受管设备,都会把这笔账算到流量、硬盘和等待时间上。AI 功能看起来在本地跑,成本却仍然落在用户机器上。

COS 不是 HTTP cache,而是按哈希找大文件

Cross-Origin Storage API 想补的,不是传统 HTTP cache。

它更像一层面向大文件的跨源存储。

思路很硬:别按 URL 和 origin 找文件,按内容哈希找。

提案里的路径是 navigator.crossOriginStorage。资源用 SHA-256 标识。如果本地已有同一份文件,就返回 FileSystemFileHandle,应用可以通过 getFile() 读出 Blob。没有命中,再从网络下载,并写入 COS。

写入时还能用 origins 选项控制哪些来源可读。

这点很重要。它不是把浏览器隔离墙砸开,而是试图给公开、不可变、可验证的大资源开一扇受控的门。

问题COS 的回答现实限制
同一模型跨站重复下载用 SHA-256 按内容识别只适合公开、不可变、可哈希验证的资源
Wasm runtime 被多站点重复缓存让相同文件跨源复用不能当普通 HTTP cache 替代品
浏览器缓存分区降低复用率新增一层显式共享存储需要权限、来源控制和滥用治理
开发者想现在就用文章用 Chrome 扩展注入 polyfill 实验不是浏览器原生实现,也不是稳定标准

最合适的对象,就是 AI 模型和 Wasm runtime。

它们大。公开。版本固定。可以用哈希校验。只要文件真的一样,就没必要让每个站点各存一份。

但边界也必须讲清楚。

COS 不能拿来共享用户私有数据。也不适合动态内容。更不该被包装成绕过浏览器隐私隔离的捷径。

我不太买账那种“共享缓存省空间,所以天然正确”的说法。

共享从来不是免费午餐。共享意味着新的可观察面。新的权限边界。新的滥用空间。哈希能证明内容一致,不能证明生态安全。

早年 Web 很依赖跨站共享缓存,后来隐私风险逼着浏览器往分区走。现在本地 AI 又把共享需求推回来。历史没有简单倒退,只是同一组利益重新排队。

“利之所在,害亦随之。”这句话放在这里很准。省下的流量和硬盘是真的,新打开的治理问题也是真的。

真正要看的,是浏览器愿不愿意给本地 AI 一层公共资源治理

这篇文章最有价值的地方,不是教你一个 API 小技巧。

它把浏览器端 AI 的基础设施账单摊开了。

本地 AI 要跑起来,不能只谈模型能力。还要谈分发、缓存、校验、权限、撤回、配额。模型越大,缓存越像基础设施。基础设施一共享,就必须有规矩。

对开发者来说,眼下别急着押 COS。

它还是早期 WICG 提案,当前没有浏览器原生实现。文章里的实验靠 Chrome 扩展注入 polyfill。做生产产品,不能把它当稳定能力。

更实际的动作是三件事:

  • 把大模型资源当成产品成本,而不是静态文件顺手一挂。
  • 对同一模型、同一 Wasm runtime 做版本固定和体积控制。
  • 观察浏览器厂商是否愿意提供原生 API、权限提示、配额策略和来源治理。

真正的分水岭不在“能不能复用文件”。

而在浏览器能不能承认:本地 AI 需要一种新的公共资源层。它既不能退回早年无边界共享,也不能让每个 origin 都重复支付同一份模型税。

如果这层治理迟迟没有,Web AI 会继续能跑,但会变笨重。

模型看着更本地,体验反而更像远程时代的下载条。