我最近开始对ASM进行一些调查,我在网上玩过一些演示。我必须说Unreal演示非常令人印象深刻......我现在已经开发了一个使用Three的应用程序了很多个月。它在快速机器上运行得很漂亮,但在低端机器上,它往往会很挣扎。当我在低端机器上运行虚幻演示时,演示就像一个梦想。我的问题是,ASM与Three有什么关系 - 它可以大大加快发动机的速度吗?在调查或开发利用两者并基于浏览器在它们之间切换的解决方案时是否值得?还有什么计划让Three在未来利用它吗?
我来自C ++背景,并且对开发某些东西的前景非常感兴趣。但与此同时,这意味着必须重新学习语言,更有问题的可能是将它带到可用点所需的大量时间。
你有什么想法?
答案 0 :(得分:14)
这是我的意见:
首先,asm.js并不是真正意图手工编写的。尽管如此,我说它有可能写它,因为它有一个验证器。虚幻的演示是用emscripten编译成asm.js的东西。它也不需要与编译后的代码之外的其他代码进行交互。所以它生成高度优化的代码,因为虚幻的演示已经是C ++中高度优化的代码,它由编译器优化,然后通过asm.js进行另一次优化运行。
其次,asm.js实际上只有firefox支持。所有其他浏览器都可以执行它,但在大多数情况下它仍然会导致性能下降。如果您比较与普通javascript代码相同的asm.js代码,则会受到此处罚。只需搜索jsperf.com以获取相关示例。
好的,这是关于asm.js的一些一般指导方针。现在让我们谈谈Three.js。
首先,因为THREE.js必须与用户代码交互,所以编写asm.js库并不容易,因为它有很多限制(没有对象)。
其次,对于asm.js强大的计算,Three.js在性能方面不会获得太多性能。但是从浏览器的未来更新中获得更多。 (例如,在chrome中创建typedarrays,现在很快就会出现在THREE.js中。V8 issue)
第三,asm.js中的代码需要管理自己的内存。这意味着THREE.js必须找到一种方法来使大型应用程序在有限的内存中工作。或者让每个应用程序都非常耗费内存。
第四,将虚幻演示与three.js进行比较有点不公平,因为three.js试图允许每个人编写3D应用程序,而虚幻引擎是3D游戏的高度优化引擎。
正如你所注意到的,我主要反对在three.js中的asm.js。但是,这就是说现在最好的方法是现在还为时过早。 asm.js很可能最终会在three.js中获得一个位置,但更多的是仅限于渲染器 - 例如。但就目前而言,围绕asm.js还有太多未解决的问题。
但是如果你想使用asm.js并使用C ++,那么我推荐使用emscripten来构建虚幻演示。
这当然是我的意见。但我认为这有点代表@ Mr.doob和@WestLangley的想法。对于长篇文章感到抱歉。
答案 1 :(得分:0)
最好的方法是在C中编写一个小的演示(手工编写)然后编译成asm.js并运行它,然后在JS中用Three.js编写相同的小演示(手动)然后运行,并比较开发人员体验和性能的差异。