Chrome实验性跨域存储API让Transformers.js模型缓存实现零重复下载

1 阅读4分钟前沿
Chrome实验性跨域存储API让Transformers.js模型缓存实现零重复下载

背景与挑战

在浏览器中使用 Transformers.js 进行推理时,模型权重和底层的 ONNX Runtime Wasm 运行时会被下载并缓存。由于浏览器的缓存按 origin 隔离,即使不同站点请求相同的资源,也会产生 177 MB 的重复下载和存储。随着模型体积不断增长,这一问题对用户体验和网络成本造成了显著压力。

跨域存储 API(Cross‑Origin Storage)概述

  • 跨域存储 是一项早期提案,提供 navigator.crossOriginStorage 接口。
  • 资源通过 SHA‑256 哈希 进行唯一标识,跨站点可通过相同哈希直接读取已缓存文件。
  • 开发者可通过 origins 参数控制可访问范围:'*'(全局可见)或指定白名单。
  • 写入时浏览器会验证哈希,确保文件完整性;读取时若不存在则返回错误,保持隐私安全。

在 Transformers.js 中的实践

import { env, pipeline } from "https://cdn.jsdelivr.net/npm/@huggingface/[email protected]";
// 启用实验性跨域存储后端
env.experimental_useCrossOriginStorage = true;
const asr = await pipeline('automatic-speech-recognition', 'Xenova/whisper-tiny.en', { device: 'webgpu' });
  • 启用后,库会为每个模型文件计算哈希,并尝试通过 navigator.crossOriginStorage.requestFileHandle(hash) 获取本地副本。
  • 若命中缓存,直接返回 Blob,省去网络往返;否则降级为普通下载并将文件写入跨域存储,以供后续站点复用。

关键技术细节

  • 资源键值hash = { algorithm: 'SHA-256', value: '8f43…' }
  • 写入流程createWritable()write(blob)close()
  • 访问控制origins: '*' 适用于公开模型(如 Whisper、DistilBERT);企业内部模型可限定特定子域。
  • 隐私防护:对仅出现少数站点的文件,浏览器可能隐藏其存在,防止通过哈希探测用户浏览历史。

业务价值

维度传统缓存跨域存储后
重复下载177 MB(Whisper)+ 4.7 MB(Wasm)仅首次下载一次
加载时延数秒至十几秒毫秒级读取
存储占用多站点累计单一副本占用
完整性保障需自行校验浏览器自动校验
隐私风险跨站点缓存泄露可能可通过 origins 限制全局可见

生态与后续

  • Transformers.js 已在 v4 中加入实验性后端,默认关闭。
  • 类似项目 WebLLMwllama 也在探索 COS 接口。
  • Chrome 团队计划在正式实现前进行更多安全评估,社区可通过 GitHub 仓库提交 Issue 与 PR。

结语

跨域存储 API 为前端 AI 推理提供了全新的缓存范式。通过哈希统一标识、可控的跨站点共享以及浏览器层面的完整性校验,开发者能够显著降低网络开销、提升用户体验,同时兼顾隐私安全。若想立刻体验,可安装官方 Cross‑Origin Storage 扩展并按文中示例开启实验标志,感受“一次下载、全站共享”的实际效果。

本文是对第三方新闻源的主观解读。消息可能出现过时、不准确、歧义或错误的地方,仅供参考使用。点击此处查看消息源。