webgpu 获得浏览器的正式支持,对web 应用的开发会产生哪些方面的影响?

70 阅读4分钟

WebGPU 获得浏览器的正式支持,是 Web 应用开发领域的一个里程碑事件,它对 Web 应用的开发将产生深远的影响,主要体现在以下几个方面:

🚀 性能与能力的大幅提升

WebGPU 是 WebGL 的继任者,它将现代 GPU 编程的先进功能带入了 Web 平台,从而实现了性能和功能上的巨大飞跃:

  • 更好的 GPU 兼容性和更高效的渲染:

    • WebGPU 基于 Direct3D 12、Metal 和 Vulkan 等现代原生 GPU API 设计,能更好地反映现代 GPU 硬件的工作方式 。
    • 它使得在 CPU 端渲染单个对象的成本更低,并支持现代化的 GPU 渲染特性(例如计算着色器、后期处理滤镜等)。
    • 应用可以实现更流畅的帧率(例如,在某些情况下可以轻松实现 60 FPS),并有更大的性能空间用于复杂的效果。
  • 一流的通用 GPU (GPGPU) 计算支持:

    • WebGPU 提供了计算着色器(Compute Shader)这一核心新功能,为 GPGPU 计算提供了原生的、灵活且高效的支持。
    • 这解决了 WebGL 时代需要通过绘制三角形来“伪装”计算任务的痛点,显著提高了机器学习(AI 推理)、物理模拟、数据处理等非渲染任务的效率。
    • 例如,TensorFlow.js 中某些模型的初始导出性能在从 WebGL 迁移到 WebGPU 后,提升了三倍。
  • 多画布和设备管理:

    • 与 WebGL 的全局状态模型不同,WebGPU 允许将画布配置与设备创建分开,这意味着可以使用同一个 GPUDevice 渲染任意数量的画布,极大地简化了多窗格 3D 编辑器等复杂应用的开发。

🛠️ 开发体验与架构的改进

WebGPU 引入了更现代、更健壮的 API 设计模式,提升了开发效率和代码质量:

  • 无状态 API:

    • WebGPU 是一种无状态 API,不维护全局状态。这使得代码共享更加容易,开发者无需担心意外更改全局状态而影响代码的其他部分,从而使创建健壮、可组合的库和应用更加容易。
  • 不可变管线 (Immutable Pipelines):

    • 管线(Pipeline)是不可变的。如果需要更改设置,只需创建一个新的管线。这简化了命令的记录和执行,例如在阴影贴图等场景中,可以更高效地记录和执行多个命令流。
  • 更好的调试支持:

    • WebGPU 提供了有用的错误消息,包括调用堆栈、清晰的错误描述和修复建议。开发者还可以为 WebGPU 对象提供自定义标签,这些标签会出现在 GPU 错误消息和开发者工具中,极大地改善了调试体验。
  • 减少样板代码:

    • WebGPU 利用了 Promise 等现有的 Web 平台功能处理异步操作,有助于减少所需的样板代码,使 API 更易于学习和使用。

💡 新的应用场景和可能性

WebGPU 的能力扩展将解锁一系列新的 Web 应用类型:

  • 高性能 AI/ML 应用:

    • 客户端 AI 推理的速度大幅提升,使大型、复杂的机器学习模型可以直接在用户的设备上运行,带来更低的延迟、更高的隐私性和更少的服务器成本。
  • 高质量 3D 游戏和沉浸式体验:

    • 现代渲染技术(如高级光照、粒子系统、复杂的后期处理效果)可以在 Web 上实现,提升 Web 游戏的画质和性能,为 WebXR(AR/VR)等沉浸式技术奠定更好的图形基础。
  • 专业级工具:

    • 能够开发更强大的浏览器内 3D 编辑器、CAD 工具、数据可视化应用和科学模拟工具,这些工具过去往往只能作为原生桌面应用存在。

总结来说,WebGPU 的正式支持意味着 Web 应用不再局限于 WebGL 的功能和性能限制,它为 Web 带来了与原生应用相媲美的 GPU 访问能力,将驱动下一代高性能、图形密集型和计算密集型 Web 应用的诞生。