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