Я создал небольшое приложение, которое сравнивает скорости WebAssembly и Javascript. К моему удивлению, JavaScript намного быстрее при расчете факториалов большого числа. Или, по крайней мере, кажется, что это так. Я уверен, что это неправильно и вызвано синтаксисом ожидания, который я использую. (Функции одинаковы.) Кроме того, какие действительно трудоемкие задачи я могу использовать для сравнения этих двух? На самом деле это не кажется трудоемким, так как это занимает менее 0,1 миллисекунды.
AssemblyScript (это компилируется в wasm)
// The entry file of your WebAssembly module.
export function fib(num: i32): i32 {
var a: i32 = 1,
b: i32 = 0,
temp: i32;
while (num > 0) {
temp = a;
a = a + b;
b = temp;
num--;
}
return b;
}
Приложение. js
import waApi from "./api";
...
<button
onClick={async () => {
const t0 = performance.now();
(await waApi).fib(200);
const t1 = performance.now();
this.updateGraph(t1 - t0, "wa");
const t2 = performance.now();
this.fib(200);
const t3 = performance.now();
this.updateGraph(t3 - t2, "js");
}}>
Calculate with both
</button>
api. js
import { instantiateStreaming } from "assemblyscript/lib/loader";
export default instantiateStreaming(fetch("./assembly.wasm"));