首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为asm.js编写优化的JS

为asm.js编写优化的JS
EN

Stack Overflow用户
提问于 2013-05-06 23:38:12
回答 4查看 1.6K关注 0票数 3

关于asm.js以及它将如何运行一些非常繁重的应用程序,有很多令人兴奋的地方。但是,它是从C++代码编译而来的。在不了解C++或其他低级语言的情况下,是否仍有可能从当前的改进中获益?

这是我的想法:有没有可能我们可以用Js编写代码,并将其重新编译为asm.js进行优化?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-06 23:55:12

但是,它是从C++代码编译而来的。

事实并非如此。这是一种语言。任何程序都可以发出包含asm.js代码的文本文件。Emscripten将LLVM编译成asm.js,并且有从C和C++到LLVM的编译器,但这只是获得asm.js代码的一种可能方式。诚然,这是目前最成熟、最实用、最流行的方式,但如果将来出现其他语言的其他asm.js编译器,我一点也不会感到惊讶。

在不了解C++或其他低级语言的情况下,还有可能从当前的改进中获益吗?

从理论上讲,任何可以提前高效编译成机器码的语言都可以使用asm.js高效地实现,这包括一些相当高级别的语言(例如Haskell)。但目前,还没有人有一个可以工作的实现,我也不认为这会变得非常流行。现在,如果您想要asm.js性能,您可能会编写C或C++代码,并将其编译成asm.js,是的。

请注意,上面排除了(以及其他许多) Javascript.The事实,即asm.js是Javascript的子集是方便的,因为asm.js代码可以在未经修改的浏览器上运行,但对于编写Javascript的人来说用处不大。asm.js基本上只是机器代码之上的一层薄层,在安全性和JS互操作性方面做了一些改进。将JS编译为asm.js与将其编译为机器码一样困难:如果您不关心性能(只需始终使用盒装的动态类型值,如解释器,并发出对运行时库函数的调用),则很容易,而当您这样做时,则非常困难。

事实上,经过几十年的研究,仍然没有像Javascript、Ruby或Python这样的高度动态的语言被提前编译成机器代码,并且运行速度比聪明的解释器快得多。另一方面,即时编译非常实用--但是主要的JS引擎已经做到了这一点,比起编译成asm.js,然后再次解析它并编译成机器码的方式要少一些。

票数 5
EN

Stack Overflow用户

发布于 2013-06-06 05:14:05

如果你有一个计算非常繁重的小函数(处理数字而不是操作DOM),你可以自己用asm.js风格手动重写它。这是可能的(I've done it),但很繁琐。

还有其他的asm.js编译器,例如LLJS,你可以用它来代替C++。

然而,asm.js并不是神奇的。只有当您使用比JS更适合于提前优化的语言时,您才能获得性能优势。您不能通过在JS VM上运行JS VM来获得功能齐全的JS并使其更快,就像您不能通过压缩来使ZIP文件更小一样。

票数 6
EN

Stack Overflow用户

发布于 2013-05-06 23:53:29

Asm.js不是一种单独的语言,而是Javascript的子集。它只是Javascript,为了提高性能,去掉了很多东西。这意味着您不需要学习另一种语言,尽管在这种情况下,了解C/C++可能有助于理解它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16402226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档