asm.js 是一个底层、格外为 JavaScript 子集优化的编译器。这是 Mozilla 研究项目,类似 Emscripten, Mandreel, 和 LLJS.
示例代码:
function mymodule(global, foreign, buffer) { "use asm"; // ------------------------------------------------------------------------- // SECTION 1: imports var H32 = new global.Int32Array(buffer); var HU32 = new global.Uint32Array(buffer); var log = foreign.consoleDotLog; // ------------------------------------------------------------------------- // SECTION 2: functions function f(x, y, z, w) { // SECTION A: parameter type declarations x = x|0; // int parameter y = +y; // double parameter // SECTION B: function body log(x|0); // call into FFI -- must force the sign log(y); // call into FFI -- already know it's a double x = (x+3)|0; // signed addition // SECTION C: unconditional return return ((((x+1)|0)>>>0)/(x|0))>>>0; // compound expression } function g() { g_f = +g_i; // read/write globals return; } function g2() { return; } function h(i, x) { i = i|0; x = x|0; H32[(i&0xffffffff)>>4] = x; // masked by 2^k-1, shifted by byte count ftable_2[(x-2)&2](); // dynamic call of functions in table 2 } // ------------------------------------------------------------------------- // SECTION 3: function tables var ftable_1 = [f]; var ftable_2 = [g, g2]; // all of the same type // ------------------------------------------------------------------------- // SECTION 4: globals var g_i = 0; // int global var g_f = 0.0; // double global // ------------------------------------------------------------------------- // SECTION 5: exports return { f_export: f, goop: g }; }
1必备知识 1.1什么是asm.js asm.js是一种JavaScript加速技术,由网络浏览器供应商Mozilla提出,并在该组织提供的Firefox中实现。其他浏览器供应商在确认其有效性后采用了此技术,现在是Chrome它也可以与Edge之类的浏览器一起使用。 1.2asm.js诞生的背景 HTML5已被公众使用,并且WEB应用程序变得越来越复杂,但是另一方面,突出了HTML固有的性能问题,
asm.js代码的结构 这是一个简单的示例。 //(1)asm.js関数宣言 function asm(stdin, foreign, heap){//引数は最大3つ "use asm";//(2)use asm宣言 //(3)インポート宣言 var imul = stdin.Math.imul; var fround = stdin.Math.fround; var cal
asm.js是具有“高度可优化”指令的 JS 子集。基本上你可以声明类型 (int, float) 和 js 引擎(在浏览器和 node.js 中)将更快地执行指令。如果您的应用程序与 WebGL 一起使用,它会进行大量计算或图形处理,这将带来好处。 web程序集是JS的二进制格式,所有的JS,不仅仅是asm.js。它不是字节码,而是解析器计算的 AST 的二进制编码。它有两大好处: JS引擎可以