2013-05-22 2 views
4

Я создал jsPref, чтобы проверить это asm.js вещи: http://jsperf.com/asm-diagПочему код asmjs медленнее даже в firefox?

Я думаю, что я сделал что-то неправильно, потому что код asmjs работает в два раза медленнее, чем обычный JS код, даже в светлячок ночью.

Я понятия не имею, что не так в коде.

Спасибо заранее,


Edit:

Benchmark.prototype.setup = function() { 
    function DiagModule(stdlib, foreign, heap) { 
     "use asm"; 

     // Variable Declarations 
     var sqrt = stdlib.Math.sqrt; 
     var pow = stdlib.Math.pow; 

     // Function Declarations 
     function square(x) { 
      x = x|0; 
      return (pow(x, 2))|0; 
     } 

     function diag(x, y) { 
      x = x|0; 
      y = y|0; 
      return +sqrt(square(x) + square(y)); 
     } 

     return { diag: diag }; 
    } 

    diag = DiagModule({ Math: Math }).diag; 
}; 

ASM:

var _diag = diag(10, 100); 

регулярна:

var _diag = Math.sqrt(Math.pow(10, 2) + Math.pow(100, 2)) 
+0

Итак, пожалуйста, покажите код! – JeffRSon

+0

http://jsperf.com/asm-diag –

+1

Было бы лучше включить код в свой вопрос и предоставить ссылку в качестве дополнительного средства. – JeffRSon

ответ

6
  1. При вызове формы JS-функции asm.js существует значительная накладная и функция, которую вы сравниваете, не делает достаточной работы, чтобы компенсировать накладные расходы.

    Когда вы используете функции asm.js, попытайтесь свести к минимуму asm < -> JS-связь и сделайте большие куски работы в модулях asm.js.

  2. jsperf заставляет модуль asm.js повторно перекомпилировать несколько раз во время теста, но Firefox еще не поддерживает перекомпиляцию, поэтому тесты jsperf никогда не запускаются в режиме asm.js.

0

Просто наткнулся на эту вещь asm.js - которая звучит потрясающе. Я сделал удар, слегка изменив тест, чтобы сделать ситуацию в двух тестах максимально похожей на вызовы функций, поиск свойств и т. Д. http://jsperf.com/asm-diag/10.

Думаю, нужен большой фрагмент кода - тяжелая математика - это то место, где оно, вероятно, превзойдет. Я буду внимательно следить за развитием asm.js.

Смежные вопросы