最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js使用WebAssembly

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

1、簡介

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

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

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

2、關(guān)鍵概念

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

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

console.log(WebAssembly);

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

3、生成WebAssembly模塊

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

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

4、如何使用它

如果我們更熟悉TypeScript的體驗,那就通過 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 從源代碼管理中排除已編譯二進制文件的Git配置。
  • ./asconfig.json 定義“調(diào)試”和“發(fā)布”目標的配置文件。
  • ./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è)存在 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>

或者,運行一下測試用例,看下最后的結(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)文章

  • Webpack 實現(xiàn) Node.js 代碼熱替換

    Webpack 實現(xiàn) Node.js 代碼熱替換

    Webpack有一個很實用的功能叫做熱替換(Hot-replace),尤其是結(jié)合React Hot Loader插件,開發(fā)過程中都不需要刷新瀏覽器,任何前端代碼的更改都會實時的在瀏覽器中表現(xiàn)出來。
    2015-10-10
  • node.js自動上傳ftp的腳本分享

    node.js自動上傳ftp的腳本分享

    這篇文章主要給大家介紹了一個關(guān)于node.js自動上傳ftp腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-06-06
  • node.js入門教程之querystring模塊的使用方法

    node.js入門教程之querystring模塊的使用方法

    querystring模塊主要用來解析查詢字符串,下面這篇文章主要介紹了關(guān)于node.js中querystring模塊使用方法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Google官方支持的NodeJS訪問API,提供后臺登錄授權(quán)

    Google官方支持的NodeJS訪問API,提供后臺登錄授權(quán)

    Google官方支持的NodeJS集成客戶端,用以訪問Google APIs, 支持OAuth 2.0授信及登錄認證。登錄以后即可在后臺訪問例如 Google Drive(云存儲), Google Analytics, Gmail等服務(wù)。
    2014-07-07
  • 13 個npm 快速開發(fā)技巧(推薦)

    13 個npm 快速開發(fā)技巧(推薦)

    這篇文章主要介紹了13 個npm 快速開發(fā)技巧,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-07-07
  • nodejs實現(xiàn)黑名單中間件設(shè)計

    nodejs實現(xiàn)黑名單中間件設(shè)計

    最近寫的項目中涉及到防止灌水的功能,于是設(shè)計了黑名單中間件,跟大家分享一下,同時也希望大家有好的建議能夠拍磚.
    2014-06-06
  • 詳解在node.js中require方法的加載規(guī)則

    詳解在node.js中require方法的加載規(guī)則

    這篇文章主要介紹了詳解在node.js中require方法的加載規(guī)則,本文一步步解析了require加載規(guī)則,講述了核心的模塊,路徑形式的模塊,第三方模塊等,需要的朋友可以參考下
    2021-06-06
  • nodejs實現(xiàn)獲取當前url地址及url各種參數(shù)值

    nodejs實現(xiàn)獲取當前url地址及url各種參數(shù)值

    這篇文章主要介紹了nodejs實現(xiàn)獲取當前url地址及url各種參數(shù)值,本文直接給出代碼實例,需要的朋友可以參考下
    2015-06-06
  • 用純Node.JS彈出Windows系統(tǒng)消息提示框?qū)嵗?MessageBox)

    用純Node.JS彈出Windows系統(tǒng)消息提示框?qū)嵗?MessageBox)

    這篇文章主要介紹了用純Node.JS彈出Windows系統(tǒng)消息提示框?qū)嵗?MessageBox),非常具有實用價值,需要的朋友可以參考下
    2017-05-05
  • NodeJs內(nèi)存占用過高的排查實戰(zhàn)記錄

    NodeJs內(nèi)存占用過高的排查實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于NodeJs內(nèi)存占用過高的排查實戰(zhàn)記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05

最新評論

石首市| 安平县| 涟源市| 德兴市| 无锡市| 凤山县| 雷州市| 梅州市| 象州县| 江油市| 长乐市| 乌审旗| 梅州市| 邢台县| 乐至县| 海林市| 宜州市| 健康| 常宁市| 长治县| 永昌县| 汽车| 海伦市| 会宁县| 嫩江县| 彭山县| 龙游县| 舞阳县| 永川市| 都江堰市| 黄骅市| 汽车| 嘉兴市| 灵丘县| 通州区| 扶余县| 和林格尔县| 天台县| 上饶市| 凤山市| 云安县|