跳转到内容

稳定性要求

加载快、不崩溃、只用合规的 Web API。各渠道的具体限制见每个渠道页面。

  • 必须:总包 < 250 MiB(YouTube 的上限是约束性的)。
  • 必须:任意单文件 < 30 MiB。
  • 应该:单文件 < 512 KiB。
  • 应该:初始包(页面加载 → bootstrapper.complete())< 15 MiB。

第一帧之外的内容请走懒加载。FRVR CDN 已支持,详见 CDN 参考

  • 应该在中端手机 / 4G 上 5 秒内可交互。
  • 必须在加载期间显示进度。bootstrapper splash 就可以。
  • 必须仅在游戏真正可交互时调 FRVR.bootstrapper.complete()(不能在”点击开始”上)。
  • 必须:云存档总量 < 3 MiB
  • 应该:< 500 KiB。
  • 必须:可被 JSON 序列化。二进制数据要 base64(也算进预算)。
  • 必须不在任何受支持设备上有可复现的崩溃。
  • 必须不让 JS 堆峰值超过 512 MB。老款 iPhone 会直接杀掉 webview,把宿主一起带走。
  • 必须不让宿主 app 或浏览器崩溃。
  • 必须只用 W3C / WHATWG 的 API(JS、Canvas、WebGL、WebAudio)。
  • 必须在 Chrome、Edge、Firefox、Safari(桌面和 iOS WebView),以及 Facebook、Samsung、Xiaomi 等的 in-app webview 里都跑通。
  • 必须(YouTube Playables 构建)在 Android 和 iOS 的 YouTube app 里跑通。
  • 必须不依赖 evalnew Function(string) 或运行时代码生成。多数渠道开了严格 CSP。
  • 必须只用相对路径。
  • 必须文件名仅包含字母数字加 _-.
  • 必须不注册自己的 service worker。渠道要么自己提供,要么禁止。
  • 缓存版本管理由 FRVR 流水线负责(打包时给文件名加 hash)。