JavaScript也能寫WebAssembly

探索方法

只聞其名,從未實踐過的WebAssembly。 照個人想法,作前端開發的大多熟悉腳本語言,不精通C、C++、rust等語言。html

那麼有一個方法能夠用js寫了源碼編譯成webassembly就行了。因而找了很久找到了walt這個東西。前端

walt

walt能夠用AssemblyScript 來編寫代碼並自動編譯,AssemblyScript 是TypeScript的子集。git

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

呃。。。這一篇估計會有點難寫,可能得看一下源碼了。web

用walt寫了幾行代碼,好像一直出錯,官方文檔也不夠豐富,不知道怎麼解決,決定再探索一下其它方法。編程

放棄walt使用 assemblyscript

又探索了一下,發現了個不須要使用walt也能夠用TypeScript寫WebAssembly的辦法,參考正面的url: github.com/AssemblyScr…bash

大體思路就是:使用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是指某一種編程語言仍是指機器碼的速度?

文章還會持續更新,源文地址

參考資料:

  1. www.ibm.com/developerwo…

  2. AssemblyScript項目主頁

相關文章
相關標籤/搜索