Skip to content

WebAssembly让你的JS运行效率提高10倍 #115

Open
@liujiusheng

Description

@liujiusheng

探索方法

只闻其名,从未实践过的WebAssembly。
照我的想法,做前端开发的大多熟悉脚本语言,不精通C、C++、rust等语言。那么有一个方法可以用js写了源码编译成webassembly就好了。于是找了好久找到了walt这个东西。

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

配置方法参考:https://github.com/ballercat/walt/wiki/Walt-In-5-Minutes

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

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

又探索了一下,发现了个不需要使用walt也可以用TypeScript写WebAssembly的办法,参考正面的url:
https://github.com/AssemblyScript/assemblyscript/wiki/Hello-World

大致思路就是:使用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编译器上。

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

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

想拿源代码也自己试一下的同学可以加我Q:891599396

参考资料:

https://www.ibm.com/developerworks/cn/web/wa-lo-webassembly-status-and-reality/index.html
assemblyscript项目主页:https://github.com/AssemblyScript/assemblyscript

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions