»
(030)使用WebAssembly
十分感谢朋友的提示。做完首页SVG的动画后,感觉效果不是特别好。于是,开始动手把3D地球模型用three.js做到网页里(百度搜到的方案)。
做完第一版后,发现JS操作粒子效果的效率特别低。于是,开始琢磨以前体验过的在线WebAssembly游戏是怎么实现的。
起初,以为WebAssembly与WebGL是两个浏览器支持的高性能框架,应用于不同的场景。
在搜索到很多在线游戏网站并且查看页面源代码url后,忽然明白了WebAssembly是WebGL的最佳搭配,是适用于WebGL动画操作的高性能计算框架,是解决JS性能问题的关键。
于是,新版本采用了计算与图形渲染分开的方式。不再使用JS来计算粒子Mesh中各个粒子的位置。而是采用C++编译的wasm来计算粒子的位置,并且通过暴露WebAssembly的内存区域给JS,来实现JS中的数组的不重新创建。
Web是单线程的,所有的计算都在UI线程中完成,所以,使用wasm带来的性能提升是巨大的。
后续,也发现了很多游戏操作物体模型时,物体模型会停止变化的原因。在用户操作物体对象时,停止物体对象的粒子效果等效果,能够巨大地提升用户操作的流畅性。这一程序设计方法使得用户操作对象的体验改善很多很多。直接感觉就是不再卡顿。
————www.v-signon.com学习者共勉