WebAssembly入門(Golang版)你學(xué)會(huì)了嗎?
?WebAssembly ( WASM ) 是一種在瀏覽器或服務(wù)器上運(yùn)行的可移植二進(jìn)制指令格式。 它的設(shè)計(jì)考慮了性能和安全性。 WebAssembly 可以從 C/C++、C#、Rust、Go 等其他編程語言編譯。
它目標(biāo)是補(bǔ)充 JavaScript 而不是取代它。 WebAssembly 旨在執(zhí)行 Web 應(yīng)用程序的繁重和密集計(jì)算任務(wù)。 這允許 JavaScript 重新專注于處理瀏覽器的交互性,并讓 WebAssembly 完成繁重的工作。
WASM 最初是為web創(chuàng)建的,它有很多應(yīng)用場景,比如:圖像/視頻編輯、游戲、VR、模擬器等等。
借助 WebAssembly 系統(tǒng)接口( WASI),WASM 開始出現(xiàn)在瀏覽器之外。 WASM+WASI 有很大的潛力,Docker 聯(lián)合創(chuàng)始人 Solomon Hykes的推文中寫道:
Wasm比linux容器啟動(dòng)時(shí)間要快很多,所以在最新版的docker預(yù)覽版中已經(jīng)支持wasm。
下面用golang來實(shí)現(xiàn)一個(gè)簡單的wasm。第一種方式使用原生golang,第二種方式使用tinygo
使用原生golang來實(shí)現(xiàn)
新建目錄wasm,在其下建立go、out兩個(gè)目錄。在go目錄中建立main.go文件
在out目錄中建立index.html
在out目錄中執(zhí)行命令來拷貝原生的wasm_exec.js文件
在wasm目錄中執(zhí)行命令來生成main.wasm文件
在wasm目錄下新建server.go文件:
好了,執(zhí)行g(shù)o run server.go然后瀏覽器訪問http://localhost:8080即可在console中看到輸出的信息。
使用tinygo來實(shí)現(xiàn)
原生的golang編譯生成的main.wasm文件比較大,不利于網(wǎng)絡(luò)傳輸,可以用tinygo來減小體積加速。
不過這時(shí)就不能使用原生golang提供的wasm_exec.js文件了,需要使用tinygo提供的wasm_exec.js文件。下載地址如下:
https://github.com/tinygo-org/tinygo/blob/release/targets/wasm_exec.js
然后根據(jù)tinygo官方文檔https://tinygo.org/getting-started/install/提供的方法安裝好tinygo。
在wasm目錄下執(zhí)行:
可以發(fā)現(xiàn)main.wasm文件僅為原來的大概八分之一。
其他的步驟和前面使用golang原生方法是一樣的。