Prime Video如何为8000多种设备类型更新应用

本文详细介绍了Prime Video如何通过采用WebAssembly技术,在保持高性能的同时实现对8000多种设备类型的快速应用更新,包括架构设计、性能提升数据和具体实施策略。

Prime Video如何为8000多种设备类型更新应用

技术架构转型

Prime Video服务需要向8000多种设备类型(包括游戏主机、电视、机顶盒和USB流媒体棒等)提供内容。传统更新方式需要为每种设备单独发布原生版本,在可更新性和性能之间存在矛盾。

解决方案采用WebAssembly(Wasm)框架,该框架允许高级语言编写的代码在任何设备上高效运行。通过加入Bytecode Alliance联盟,进一步推动了安全、高效、模块化和可移植的运行时环境开发。

双模块架构设计

应用采用两部分架构:

  1. 设备端存储的高性能C++引擎
  2. 每次启动时下载的可更新组件

原始架构包含:

  • 设备端C++层:包含JavaScript虚拟机(VM)和核心组件(处理输入、媒体管道、网络访问等)
  • 运行时下载内容:应用代码和底层组件(场景管理、动画系统、图形渲染等)

WebAssembly实施

2020年8月开始原型测试,发现Rust编译为Wasm的代码比JavaScript快10-25倍。实施方案特点:

  • 仅将底层系统从JavaScript迁移到Wasm
  • 保持对传统设备的兼容性
  • Wasm二进制文件与JavaScript代码通过自动化管道同步部署

技术实现细节

  1. 启动时检测设备Wasm支持能力
  2. JavaScript创建轻量级宿主节点,通过消息传递与Wasm VM通信
  3. 保持JavaScript系统行为兼容性
  4. 确保线程安全调用

性能优化成果

  • 中端电视平均帧时间从28ms降至18ms
  • 最差帧时间从40ms降至25ms
  • 总内存占用减少30MB JavaScript堆内存
  • Wasm模块压缩后仅150KB,不影响启动时间
  • 已编写37,000行Rust代码

未来方向

计划将焦点管理和布局等更多系统迁移到Wasm,以实现稳定的60帧/秒输出并降低输入延迟。Rust语言的使用还带来了高质量库生态系统和更安全的代码审查流程。

[调试信息覆盖的渲染图像示例]:展示了通过Rust GUI库实现的引擎内部调试视图。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计