Prime Video如何为8000多种设备类型更新应用
技术架构转型
Prime Video服务需要向8000多种设备类型(包括游戏主机、电视、机顶盒和USB流媒体棒等)提供内容。传统更新方式需要为每种设备单独发布原生版本,在可更新性和性能之间存在矛盾。
解决方案采用WebAssembly(Wasm)框架,该框架允许高级语言编写的代码在任何设备上高效运行。通过加入Bytecode Alliance联盟,进一步推动了安全、高效、模块化和可移植的运行时环境开发。
双模块架构设计
应用采用两部分架构:
- 设备端存储的高性能C++引擎
- 每次启动时下载的可更新组件
原始架构包含:
- 设备端C++层:包含JavaScript虚拟机(VM)和核心组件(处理输入、媒体管道、网络访问等)
- 运行时下载内容:应用代码和底层组件(场景管理、动画系统、图形渲染等)
WebAssembly实施
2020年8月开始原型测试,发现Rust编译为Wasm的代码比JavaScript快10-25倍。实施方案特点:
- 仅将底层系统从JavaScript迁移到Wasm
- 保持对传统设备的兼容性
- Wasm二进制文件与JavaScript代码通过自动化管道同步部署
技术实现细节
- 启动时检测设备Wasm支持能力
- JavaScript创建轻量级宿主节点,通过消息传递与Wasm VM通信
- 保持JavaScript系统行为兼容性
- 确保线程安全调用
性能优化成果
- 中端电视平均帧时间从28ms降至18ms
- 最差帧时间从40ms降至25ms
- 总内存占用减少30MB JavaScript堆内存
- Wasm模块压缩后仅150KB,不影响启动时间
- 已编写37,000行Rust代码
未来方向
计划将焦点管理和布局等更多系统迁移到Wasm,以实现稳定的60帧/秒输出并降低输入延迟。Rust语言的使用还带来了高质量库生态系统和更安全的代码审查流程。
[调试信息覆盖的渲染图像示例]:展示了通过Rust GUI库实现的引擎内部调试视图。