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