大多数 App 的速度慢于必要水平——原因揭秘(Live Demo🛸)

发布: (2026年4月16日 GMT+8 15:05)
8 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容,我将为您翻译成简体中文并保持原有的格式。

浏览器不仅仅是 UI 层

我们已经进入 21 世纪的第一个四分之一,浏览器悄然演变成远超单纯 UI 层的存在。它能够:

  • 运行复杂计算,
  • 利用 GPU,
  • 处理音频,
  • 模拟物理,且
  • 甚至运行机器学习模型。

然而……大多数时候我们仍然把它当作表单和仪表盘的工具来使用。

我想展示一下,当我们真正利用平台已经提供的能力时,会发生什么。

活动快速回顾

jsday conference in Bologna 刚刚结束,真的非常棒。如果你在想参加这种活动是否值得——答案是肯定的。它是灵感的源泉,远超文章或教程所能提供的。

如果你有一分钟时间,我会非常感激你在我的 LinkedIn 帖子 上点个赞。

WebGPU + WebAssembly:为什么要把它们放在一起讨论?

如果你一直在关注我的文章,你可能已经知道我的演讲主题是 WebGPUWebAssembly,以及在浏览器中使用它们可以获得的收益。

  • WebAssembly 在 CPU 上运行,让我们能够直接在浏览器中执行低层、编译后的代码。
  • WebGPU,顾名思义,给我们提供了对 GPU 的访问——不是以某种抽象、受限的方式,而是相对直接且强大的形式。

它们本身就是互补的设计。

进一步阅读

一个具体示例

与其单独讨论它们,我构建了一个小型演示,将两种技术结合在一起。

  • Repo:
  • Live demo:

它有什么作用?
你在输入框中键入文字,文字会被转换为粒子,当你点击并拖动鼠标穿过它时……文字会爆炸。

完全没用? 是的。
稍微有点上瘾? 也是的 😅

第 1 步 – Canvas 2D

输入框中的文字使用普通 JavaScript 和 Canvas 2D 渲染为图像位图。这正是经典浏览器 API 已经足够胜任的任务,没有真正的理由把它搬到别处——尤其是像这样的演示。

第 2 步 – WebAssembly

位图被传递给 WebAssembly,在那里一个刻意“有点过度设计”的算法将图像映射为粒子。我希望 WASM 能真正有有意义的工作要做,老实说,这样看起来也更酷。

基准测试: WebAssembly 的速度大约是等效 JavaScript 实现的 2–3 倍(即使在对 JS 版本进行大量优化后)。

在此演示中,这个差异并不重要,因为该步骤只在重建时运行一次,但当操作必须执行数百甚至数千次时,数量级的提升就变得至关重要。

第 3 步 – WebGPU

粒子被传递给 WebGPU——这正是浏览器真正开始展现实力的地方。

实现方式粒子数量行为表现
JavaScript + Canvas 2D~40 k帧率下降,动画变慢
WebGPU>500 k动画流畅,FPS 稳定

同一浏览器、同一应用、同一台机器——但只要使用合适的工具,性能水平就会截然不同。

何时需要它?

这并不是你常见的前端 CRUD 设置。你可能根本不需要 WebGPU 来构建仪表盘或表单,在很多情况下真正的瓶颈是网络,而不是计算。

然而,确实存在整类问题,在这些场景下采用这种方式会产生巨大的差异:

  • 实时数据可视化
  • 物理仿真
  • 图形密集型界面
  • 音频处理
  • 游戏
  • 图像或视频转换
  • 矩阵密集型工作负载(例如机器学习、LLM)直接在浏览器中运行

有趣的是,你往往在不需要它的时候觉得不需要……直到某一刻你真的需要它。产品演进、需求增长、性能成为问题,或是你想把部分工作负载从后端迁移到客户端。那时,事情就变得有趣起来。

演示的结构是怎样的?

如果你查看仓库,会注意到一个重要的点:这只是一个普通的 React 应用

  • 没有奇特的架构,也没有“来自外星”的技术栈。
  • 是的,里面有编译成 WASM 的 Rust 和 WebGPU 着色器,但它们只是嵌入在标准的前端设置中。
  • 应用的其余部分看起来完全像你明天就可以在项目中启动的东西。

这本身就是有意为之。我想说明,这并不是某个遥远的、仅供小众使用的实验性 playground。它是可以直接集成到真实业务中的——可以逐步引入,在真正需要时使用。

**注意:**WebGPU 仍未在所有平台上普遍支持,因此你需要准备回退方案。但对于大多数用户来说,几乎没有理由不开始探索它。

要点

浏览器不再仅仅是我们渲染 UI 的场所。
它已经成为一个强大的计算平台——开箱即用,直接提供对 CPU 和 GPU 的访问。

  • 并不是每个项目都需要 WebAssembly 或 WebGPU。大多数情况下,你根本不需要它们也能很好地工作。
  • 当你开始遇到性能瓶颈,或问题从简单的 UI 转向大量计算时,这些工具就会成为改变游戏规则的关键。

“从‘搬运数据’到‘实际计算’……你可能会意识到平台一直以来已经拥有了解决方案。
而你所要做的,仅仅是使用它。 🚀

0 浏览
Back to Blog

相关文章

阅读更多 »

React 基础入门

React Basics for Beginners 的封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-upl...