WebAssembly-wasm


1、WebAssembly是什么

  首先,WebAssembly是一種技術方案統稱,主要用於移植非js代碼到瀏覽器環境中執行。

      

  為什么要移植其他代碼,是js不香了么?

  ①:得益於先天的語言特性untyped,在所有編程語言中,js的執行速度屬於末流;(首先,它慢)

  ②:隨着web領域的發展,需要承載的需求越來越多,需要提供的能力要求也越來越高。(地圖、游戲、制圖等高性能需求場景出路在哪里)

  ③:性能優化是一個持久命題,再快點,再好點

 

2、wasm比js快么?為什么快?快多少?

  ①:javascript本質是文本,wasm是二進制字節碼,體積更小

  ②:靜態類型,不需要針對動態類型進行編譯優化

  ③:wasm更接近機器碼,解析效率更好

  

  差距參考 1 : 3 : 17

 

 

 

3、如何使用wasm

  環境:git cmake python2.7.x

  工具: emscripten (github安裝教程),這個是必備的

       wabt(github),為了讀編譯后的代碼

  大體流程:

    編譯:編譯心儀的代碼為wasm

    執行:①加載字節碼;②編譯字節碼;③實例化

  3-1 編譯:

    安裝emsdk之后,使用emcc命令編譯文件,示例:

      emcc a.c -Os -s WASM=1 -s SIDE_MODULE=1 -o a.wasm

  3-2 執行:

      

// 封裝的異步loader
function load(path) {
    return fetch(path)
        // 獲取二進制buffer
        .then(res => res.arrayBuffer())
        // 編譯&實例化,導入js對象
        .then(bytes => WebAssembly.instantiate(bytes, importObj))
        // 返回實例
        .then(res => res.instance)
}

load("./test_demo/a.wasm").then(instance => {
  // 導出模塊中的函數
  console.log(instance)
  const {add} = instance.exports
  
    console.log(add(1,2))
})

 其他:assemblyscript

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM