这是我的意见:
首先,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问题)
第三,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 的想法。并对这篇长篇文章感到抱歉。