返回首页

Xsnow

可以从这里实时运行。

这个项目的灵感来自于 js-snow 项目。人们一直对于一个1990年代由当时典型的 Linux 桌面环境自带的名字叫 Xsnow 的小 X11 程序感到非常怀旧。为了满足好奇心,我们找到了之前提到的 js-snow 项目——一个运行于浏览器中的由纯粹 JavaScript 语言编写的程序。基于此,可以想象其性能并不会达到最佳,因为在里面每一片雪花的轨迹都是实时、不间断地计算出来的,而 JavaScript 语言并不是特别为这种场景设计的。

确实,在一台典型的计算机上,该程序只能达到大概25fps,然而 CPU 利用率却飙升到了75%。我们对于该项目的改进基于以下两方面:

  1. 核心的计算部分用 C/C++ 语言进行了重新编写,并被编译成了 WebAssembly (Wasm):这样就可以达到30fps同时 CPU 利用率降到了5%(!)以下——事实上,在我们的实现中,JavaScript 仅负责雪花位置的更新(通过 DOM 操作,实质上是调用浏览器功能),而所有繁重的位置计算任务最终是由汇编语言完成的。
  2. 记得原本 X11 版本的 Xsnow 会让雪花在屏幕下方堆积,然而在 js-snow 中这个效果并没有实现——也许是基于性能的考虑。我们添加了雪花堆积和融化的效果,因此当一些雪花落到了屏幕下方的时候它们会先堆积起来,一会儿之后会消失(融化掉)。并且,这些添加的效果作为计算任务的一部分是由 C/C++ 实现的。

可以看到,通过使用 Wasm 来充分利用 CPU 的处理性能,我们能够很大地提升计算的效率。我们也正在计划发布一个基于 GPU 加速器——例如通过 WebGPU——的版本,使用计算着色器 (compute shaders) 来进行位置的计算。

可以从这里找到它。

返回首页
版权所有 (C) 2025, 硅导有限公司。保留所有权利。