JavaScript也能写WebAssembly

探索方法

只闻其名,从未实践过的WebAssembly。 照我的想法,做前端开发的大多熟悉脚本语言,不精通C、C++、rust等语言。

那么有一个方法可以用js写了源码编译成webassembly就好了。于是找了好久找到了walt这个东西。

walt

walt可以用AssemblyScript 来编写代码并自动编译,AssemblyScript 是TypeScript的子集。

配置方法参考:github.com/ballercat/w…

呃。。。这一篇估计会有点难写,可能得看一下源码了。

用walt写了几行代码,好像一直出错,官方文档也不够丰富,不知道怎么解决,决定再探索一下其它方法。

放弃walt使用 assemblyscript

又探索了一下,发现了个不需要使用walt也可以用TypeScript写WebAssembly的办法,参考正面的url: github.com/AssemblyScr…

大致思路就是:使用asc工具,将assemblyscript编写的代码生成.wasm 文件,再使用new WebAssembly.Instance()和new WebAssembly.Module()将其加载为js可读取的代码。最终用js调用。

记录一段加载.wasm并调用其中方法的代码吧。

fetch('./module.optimized.wasm')
        .then(response => response.arrayBuffer())
        .then(function(result){
            console.log(result);
            let myModule = new WebAssembly.Instance(new WebAssembly.Module(result, {}));
            console.log(myModule.exports.add());
        });
复制代码

全部源代码地址

对比测试

将斐波那契测试n值设置为50时原生js耗时: 243727毫秒,WebAssembly耗时: 87325毫秒。性能差异巨大。

有空的时候得再测试一下C和JAVA与它的性能对比。

哭,相同环境下JAVA跑出来只要40000多毫秒。

语言n值耗时(ms)
js50243727
WebAssembly5087325
JAVA5040000
C--

本次测试中WebAssembly运算速度大概为js的3倍,JAVA的1/2,相对来说性能已经有了极大的提升。

但是为什么比JAVA慢,个人认为性能瓶颈应该是出在了WebAssembly编译器上。

以后应该仔细研究一下WebAssembly的编译器。

还有许多没有搞明白的,比如:官网上说的native speed是指某一种编程语言还是指机器码的速度?

文章还会持续更新,源文地址

参考资料:

  1. www.ibm.com/developerwo…

  2. AssemblyScript项目主页

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值