asm 编写 wasm 对比原生性能

原文链接: asm 编写 wasm 对比原生性能

上一篇: ramda 日常使用

下一篇: asm 数组的双向传递

目前go由于运行时太大了, 不带gc又会出现很多问题

tinygo及其不稳定, demo可以, 但是大点的就会出很多奇怪的问题, 今天就遇到没法声明byte数组的问题...............

https://webassembly.studio/

https://www.assemblyscript.org/quick-start.html

npm install --save @assemblyscript/loader
npm install --save-dev assemblyscript

npx asinit .

npm run asbuild

性能提升不是很明显啊... 还是得试试c

up-adc0123a589f66b943b07a5d8fca7908d4e.png

写法非常简单

up-457e9ad876b88086c29f14041332300c2e8.png

在web中使用

<template>
 
  <button @click="test">test</button>
  <button @click="js">js</button>
  <button @click="wasm">wasm</button>
</template>

<script>
import { ref } from "vue";
import loader from "@assemblyscript/loader";

const WASM_URL = "../build/optimized.wasm";
console.log("loader", loader);
const wasmModule = loader.instantiateStreaming(fetch(WASM_URL));
console.log("wasmModule.exports:", wasmModule);

let fibWasm;
wasmModule.then((obj) => {
  console.log("obj", obj);
  const add = obj.instance.exports.add;
  console.log("add", add(1, 2));
  fibWasm = obj.instance.exports.fib;
});

const fibJs = (n) => (n < 2 ? n : fibJs(n - 1) + fibJs(n - 2));
export default {
  methods: {
    test() {
      console.log("fibWasm", fibWasm);
      let st = 0;
      let ed = 0;
      for (let i = 0; i < 40; i++) {
        st = +new Date();
        let f1 = fibJs(i);
        ed = +new Date();
        let t1 = ed - st;

        st = +new Date();
        let f2 = fibWasm(i);
        ed = +new Date();
        let t2 = ed - st;
        console.log(f1, f2, t1, t2);
      }
    },
    js() {
      let st = +new Date();
      let f2 = fibJs(40);
      let ed = +new Date();
      let t2 = ed - st;
      console.log("js", f2, t2);
    },
    wasm() {
      let st = +new Date();
      let f2 = fibWasm(40);
      let ed = +new Date();
      let t2 = ed - st;
      console.log("wasm", f2, t2);
    },
  },
 
  
};
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值