只聞其名,從未實踐過的WebAssembly。 照個人想法,作前端開發的大多熟悉腳本語言,不精通C、C++、rust等語言。html
那麼有一個方法能夠用js寫了源碼編譯成webassembly就行了。因而找了很久找到了walt這個東西。前端
walt能夠用AssemblyScript 來編寫代碼並自動編譯,AssemblyScript 是TypeScript的子集。git
配置方法參考:github.com/ballercat/w…github
呃。。。這一篇估計會有點難寫,可能得看一下源碼了。web
用walt寫了幾行代碼,好像一直出錯,官方文檔也不夠豐富,不知道怎麼解決,決定再探索一下其它方法。編程
又探索了一下,發現了個不須要使用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是指某一種編程語言仍是指機器碼的速度?