11

我最近开始对 ASM 进行一些调查,并且玩过一些在线演示。我必须说,虚幻的演示非常令人印象深刻……我已经使用 Three 开发了一个应用程序已经有好几个月了。它在快速机器上运行良好,但在低端机器上往往会遇到困难。当我在我的低端机器上运行虚幻演示时,演示就像做梦一样。我的问题是,ASM 与 Three 有什么关系——它能大大加快引擎的速度吗?是否值得研究或开发一种利用两者并基于浏览器在它们之间切换的解决方案?三号未来有没有利用它的计划?

我来自 C++ 背景,并且对开发某些东西的前景非常感兴趣。但与此同时,这意味着必须重新学习该语言,而且更成问题的可能是需要大量时间才能使其达到可用点。

你怎么认为?

4

2 回答 2

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问题

第三,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 的想法。并对这篇长篇文章感到抱歉。

于 2013-08-26T08:28:07.923 回答
0

找出答案的最好方法是用 C(手动)编写一个小演示,然后编译为 asm.js 并运行它,然后用 Three.js(手动)在 JS 中编写相同的小演示,然后运行它,然后比较开发人员体验和性能的差异。

于 2017-04-06T18:01:47.330 回答