Afs*_*ani 10 javascript emscripten asm.js
据我所知,Asm.js只是一个严格的JavaScript规范,它使用JavaScript功能,它不是一种新语言.
例如var a = e;,它提供而不是使用var a = e|0;.
我的问题是,如果asm.js只是一个定义,并且可以通过改变使用和声明变量和动态类型的方式来实现,那么它"use asm";实际上做了什么?在声明函数体之前是否需要将此字符串放入?
Asm.js是JavaScript的一个非常严格的子集,它针对机器而不是人类进行了优化.如果您希望浏览器将某些代码解释为asm.js代码,则需要创建一个模块,其中包含以下条件:
"use asm"pragma 开头此外,asm.js模块最多只允许三个可选但非常具体的参数:
ArrayBuffer作为asm.js堆所以,你的模块基本上应该是这样的:
function MyAsmModule(stdlib, foreign, heap) {
"use asm";
// module body...
return {
export1: f1,
export2: f2,
// ...
};
}
Run Code Online (Sandbox Code Playgroud)
模块的函数参数允许asm.js调用外部JavaScript并与"普通"JavaScript共享其堆缓冲区.从模块返回的exports对象允许外部JavaScript调用asm.js.
遗漏了"use asm",您的浏览器不会知道它应该将您的代码解释为asm.js模块.它会将您的代码视为"普通"JavaScript.但是,仅仅使用"use asm"不足以将您的代码解释为asm.js. 未能满足上文提到的任何其他标准,您的代码也将被解释为"普通"JavaScript:
有关asm.js的更多信息,请参阅eg.John Resig的文章来自2013年或官方规格.
"use asm"是一个pragma,它告诉JavaScript引擎具体如何解释它.尽管它是有效的JavaScript并且可以在没有编译指示的情况下使用,但FireFox可以对Asm.js子集执行其他优化以提高性能.要做到这一点,它必须知道它是Asm.js.
| 归档时间: |
|
| 查看次数: |
3417 次 |
| 最近记录: |