概述
探索方法
只闻其名,从未实践过的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) |
---|---|---|
js | 50 | 243727 |
WebAssembly | 50 | 87325 |
JAVA | 50 | 40000 |
C | - | - |
本次测试中WebAssembly运算速度大概为js的3倍,JAVA的1/2,相对来说性能已经有了极大的提升。
但是为什么比JAVA慢,个人认为性能瓶颈应该是出在了WebAssembly编译器上。
以后应该仔细研究一下WebAssembly的编译器。
还有许多没有搞明白的,比如:官网上说的native speed是指某一种编程语言还是指机器码的速度?
文章还会持续更新,源文地址
参考资料:
-
www.ibm.com/developerwo…
-
AssemblyScript项目主页
最后
以上就是羞涩橘子为你收集整理的JavaScript也能写WebAssembly的全部内容,希望文章能够帮你解决JavaScript也能写WebAssembly所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复