欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js使用WebAssembly

 更新時間:2023年05月24日 09:05:07   作者:和你一起去月球  
本文主要介紹了Node.js使用WebAssembly,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、簡介

首先,讓我們了解為什么WebAssembly是一個很棒的工具,并學(xué)會自己使用它。

WebAssembly是一種類似匯編的高性能語言,可以從各種語言編譯,包括C/C++RustAssemblyScript。目前,Chrome、Firefox、Safari、Edge和Node.js都支持它!

WebAssembly規(guī)范詳細(xì)介紹了兩種文件格式,一種是擴(kuò)展名為.wasm的WebAssembly模塊的二進(jìn)制格式,另一種是相應(yīng)的擴(kuò)展名為.wat的WebAssemblyText格式的文本表示。

2、關(guān)鍵概念

  • 模塊 - 一個經(jīng)過編譯的WebAssembly二進(jìn)制文件,即.wasm文件。
  • 內(nèi)存 - 可調(diào)整大小的ArrayBuffer。
  •  - 未存儲在內(nèi)存中的可調(diào)整大小的引用類型數(shù)組。
  • 實(shí)例 - 模塊及其內(nèi)存、表和變量的實(shí)例化。

為了使用WebAssembly,您需要一個.wasm二進(jìn)制文件和一組API來與WebAssembly通信。Node.js通過全局WebAssembly對象提供了必要的API。

console.log(WebAssembly);

我們在瀏覽器中打印下這個對象,如下圖所示:

3、生成WebAssembly模塊

有多種方法可用于生成WebAssembly二進(jìn)制文件,包括:

其中一些工具不僅生成二進(jìn)制文件,還生成要在瀏覽器中運(yùn)行的JavaScript“粘合”代碼和相應(yīng)的HTML文件。

4、如何使用它

如果我們更熟悉TypeScript的體驗(yàn),那就通過 AssemblyScript 來試一下

1、我們先安裝一下 AssemblyScript

npm install --save-dev assemblyscript

2、我們通過編譯器對應(yīng)的腳手架工具,快速生成推薦目錄結(jié)構(gòu)和配置文件

npx asinit .

目錄結(jié)果如下:

  • ./assembly 包含正在編譯到WebAssembly的AssemblyScript源的目錄。
  • ./assembly/tsconfig.json TypeScript配置繼承了建議的AssemblyScript設(shè)置。
  • ./assembly/index.ts 示例文件正在編譯到WebAssembly中,以便開始使用。
  • ./build 生成存儲編譯的WebAssembly文件的工件目錄。
  • ./build/.gitignore 從源代碼管理中排除已編譯二進(jìn)制文件的Git配置。
  • ./asconfig.json 定義“調(diào)試”和“發(fā)布”目標(biāo)的配置文件。
  • ./package.json 包含編譯到WebAssembly所需命令的包信息。
  • ./tests/index.js 啟動測試,以檢查模塊是否正常工作。
  • ./index.html 生成的html文件

3、打開,index.ts 我們在里面寫了一個函數(shù):

export function add(a: i32, b: i32): i32 {
 return a + b;
}

4、然后我們編譯一下

npm run asbuild

一旦有了WebAssembly模塊,就可以使用Node.js WebAssembly對象來實(shí)例化它。

// 假設(shè)存在 release.wasm文件,該文件aad 包含一個添加2個提供參數(shù)的函數(shù)
async function instantiate(module, imports = {}) {
  const { exports } = await WebAssembly.instantiate(module, imports);
  return exports;
}
export const {
  memory,
  add
} = await (async url => instantiate(
  await (async () => {
    try { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url)); }
    catch { return globalThis.WebAssembly.compile(await (await import("node:fs/promises")).readFile(url)); }
  })(), {
  }
))(new URL("release.wasm", import.meta.url));

5、打開index.html文件,看一下結(jié)果:

<!DOCTYPE html>
<html lang="en">
<head>
  <script type="module"> 
    import { add } from "./build/release.js"; 
		document.body.innerText = add(1, 2);
	</script>
</head>
<body></body>
</html>

或者,運(yùn)行一下測試用例,看下最后的結(jié)果也是可以的,如下所示:

5、與操作系統(tǒng)交互

WebAssembly模塊本身無法直接訪問操作系統(tǒng)功能。

可以使用第三方工具Wasmtime(https://docs.wasmtime.dev/)來訪問此功能。

Wasmtime利用WASI(https://wasi.dev/) API來訪問操作系統(tǒng)的功能。

到此這篇關(guān)于Node.js使用WebAssembly的文章就介紹到這了,更多相關(guān)Node WebAssembly內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫的方法

    Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫的方法

    這篇文章主要介紹了Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫的方法,這里默認(rèn)已經(jīng)裝配好了Node環(huán)境然后我們利用npm包管理工具來進(jìn)行配置,需要的朋友可以參考下
    2016-03-03
  • Node.js同時安裝多個版本及相關(guān)配置指南(簡單易操作)

    Node.js同時安裝多個版本及相關(guān)配置指南(簡單易操作)

    在實(shí)際開發(fā)過程中我們可能需要安裝多個版本的 nodejs,下面這篇文章主要給大家介紹了關(guān)于Node.js同時安裝多個版本及相關(guān)配置的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • nodejs對mongodb數(shù)據(jù)庫的增加修刪該查實(shí)例代碼

    nodejs對mongodb數(shù)據(jù)庫的增加修刪該查實(shí)例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于nodejs對mongodb數(shù)據(jù)庫的增加修刪該查實(shí)例代碼,有需要的朋友們可以參考下。
    2020-01-01
  • Node.js全局對象Global的實(shí)現(xiàn)

    Node.js全局對象Global的實(shí)現(xiàn)

    在Nodejs下全局變量和全局函數(shù)都是可以使用global來訪問到的,本文主要介紹了Node.js全局對象Global的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Node.js dgram模塊實(shí)現(xiàn)UDP通信示例代碼

    Node.js dgram模塊實(shí)現(xiàn)UDP通信示例代碼

    這篇文章主要介紹了Node.js dgram模塊實(shí)現(xiàn)UDP通信示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 初始Nodejs

    初始Nodejs

    本文屬于nodejs的基礎(chǔ)知識介紹篇,從nodejs的基本概念,到架構(gòu)示意圖,同步異步等方面做了詳細(xì)的解答,是篇非常不錯的文章
    2014-11-11
  • 你一定會收藏的Nodejs代碼片段

    你一定會收藏的Nodejs代碼片段

    Nodejs值得收集的代碼片段,大家可以收藏起來,運(yùn)用到之后的工作中,感興趣的小伙伴們可以參考一下
    2016-02-02
  • ExpressJS入門實(shí)例

    ExpressJS入門實(shí)例

    這篇文章主要介紹了ExpressJS入門實(shí)例,本文講解了創(chuàng)建項(xiàng)目、進(jìn)入目錄、安裝項(xiàng)目依賴的包、創(chuàng)建應(yīng)用程序、運(yùn)行程序等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • 在Node.js中實(shí)現(xiàn)文件復(fù)制的方法和實(shí)例

    在Node.js中實(shí)現(xiàn)文件復(fù)制的方法和實(shí)例

    這篇文章主要介紹了在Node.js中實(shí)現(xiàn)文件復(fù)制的方法和實(shí)例,使用FS模塊實(shí)現(xiàn),需要的朋友可以參考下
    2014-06-06
  • 用Node編寫RESTful API接口的示例代碼

    用Node編寫RESTful API接口的示例代碼

    本篇文章主要介紹了用Node編寫RESTful API接口的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論