稳定性要求
加载快、不崩溃、只用合规的 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 或浏览器崩溃。
Web 标准
Section titled “Web 标准”- 必须只用 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 里跑通。
- 必须不依赖
eval、new Function(string)或运行时代码生成。多数渠道开了严格 CSP。
文件路径与命名
Section titled “文件路径与命名”- 必须只用相对路径。
- 必须文件名仅包含字母数字加
_、-、.。
Service Worker
Section titled “Service Worker”- 必须不注册自己的 service worker。渠道要么自己提供,要么禁止。
- 缓存版本管理由 FRVR 流水线负责(打包时给文件名加 hash)。