Próbuję zrozumieć, jak dokładnie działa ASM, a kiedy w rzutach.Firefox nie wydają się być szybciej przy użyciu profilu asm.js, ale Chrome jest
Wziąłem małą funkcję ze strony asm.js . Pakuję go za pomocą wzorca modułu: raz dla asm, raz z tą samą składnią, ale bez adnotacji "use asm" i raz jak z wanilią-javascript.
var add_asm = (function MyAOTMod(stdlib, foreign, heap) {
"use asm";
var sqrt = stdlib.Math.sqrt;
function square(x) {
x = +x;
return +(x * x);
}
return function(x, y) {
x = +x; // x has type double
y = +y; // y has type double
return +sqrt(square(x) + square(y));
};
}(window));
var add_reg_asmstyle = (function MyAsmLikeRegularMod() {
function square(x) {
x = +x;
return +(x * x);
}
return function(x, y) {
x = +x; // x has type double
y = +y; // y has type double
return +Math.sqrt(square(x) + square(y));
};
}());
var add_reg = (function MyStrictProfile() {
"use strict";
return function(x, y) {
return Math.sqrt(x * x + y * y);
};
}())
utworzonego małą jsperf: kod jsperf nieznacznie różni się od powyższego, wskazówki zawierające od gwintu dyskusja poniżej http://jsperf.com/asm-simple/7
The wykonania pokazuje, że zapalić 22 jest najwolniejszym z ASM -syntax (z lub bez adnotacji "use asm"), a chrome jest najszybsze w trybie asm.
Moje pytanie brzmi: jak to jest możliwe? Spodziewam się, że Firefox będzie najszybszy w trybie asm. Nie spodziewam się żadnej różnicy w Chrome. Czy używam niewłaściwej składni asm? czego mi brakuje?
Każda rada lub wyjaśnienie są mile widziane. Dzięki,
nie wie nic o czymkolwiek jest ASM, ale dlaczego uważasz, że Firefox byłby najszybszy? Wiesz, że używają różnych silników JavaScript, prawda? Wszystkie przeglądarki różnią się wydajnością – Ian
Wywołaj funkcję raz w ustawieniach (aby uruchomić kompilację), a następnie zobacz wynik: – SheetJS
@Ian: OP porównuje kod ASM i kod spoza ASM w każdej przeglądarce, aby zobaczyć różnicę, jaką powoduje. Chrome nie obsługuje optymalizacji ASM AFAIK, więc adnotacja nie powinna mieć znaczenia, a FireFox ją obsługuje. OP nie porównuje FF z Chrome. –