Chrome 和 Opera 为 asm.js 优化

jopen 10年前

Mozilla 宣布,除Firefox外,另外两大浏览器Chrome和Opera正为asm.js优化。 asm.js是 Mozilla开发的JavaScript子集,避开了JavaScript中大量难以优化的动态功能,特性更少但更容易优化,能实现接近原生的性能,是 Google的NaCl技术的竞争对手。Mozilla表示,Firefox仍然拥有最出色的asm.js性能表现,但其它两大浏览器正缩小差距。

asm.js 是一个底层、格外为 JavaScript 子集优化的编译器。这是 Mozilla 研究项目,类似 Emscripten, Mandreel, 和 LLJS.

Chrome 和 Opera 为 asm.js 优化

示例代码:

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 };  }


载自: Solidot