很久之前 看到unity 小游戏上对于wasm和js 上关于性能的比较 ,今天想起来了,问问这个数据怎么得来的
优化Unity WebGL的运行性能 | 微信小游戏Unity/团结快适配
我之前整过,性能的提升其实和你的计算量有很大关系,只有计算量足够大才能体现wasm的效率,普通的计算量可能会出现相反的效果
看你们做的是个啥了,如果是广告播放器游戏怎么写都没问题
其实可以搞个视频解码的去做对比,对比js版本跟wasm版本解码速度的区别
这个建议能ts还是ts,如果ts不够,那就把纯计算的部分放Worker或WASM。
主要是,worker和WASM都是要有独立的内存空间的,就会涉及到非共享的内存空间之间的I/O损耗,所以最好的实现就是:
比如原本计算耗时是2秒。你把纯计算的步骤独立写成Worker或WASM。
然后很少量的原始数据从主线程进入Worker或WASM,因为数据量小,读写I/O耗时0.1秒。
然后Worker或WASM去计算,比如Worker耗时1秒,WASM耗时0.5秒。
然后结果数据也是很少量的,读回主线程,耗时0.1秒。
这样你的总时间就是0.1 + 1.0 / 0.5 + 0.1 = 1.2 / 0.7秒,比原本的2秒要节省0.8 / 1.3秒。
最坑爹的实现就是,主线程和Worker或WASM之间有海量数据的读写,这就是大坑!
另一个极为坑爹的实现就是,比如你有个1000次的遍历,那么就应该在Worker或WASM里实现这个遍历,再把遍历结果返回。结果你居然在主线程实现遍历,然后遍历内的操作是在Worker或WASM里实现的,等于说你有2000次的I/O损耗!
那么理论上,把碰撞检测,RVO2。这些算法打包成wasm。性能会提升30%以上是吧
这个30%以上是怎么算出来的?
全靠猜测
