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

Node.js使用WebAssembly

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

1、簡介

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

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)鍵概念

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

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

console.log(WebAssembly);

我們在瀏覽器中打印下這個(gè)對(duì)象,如下圖所示:

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、我們通過編譯器對(duì)應(yīng)的腳手架工具,快速生成推薦目錄結(jié)構(gòu)和配置文件

npx asinit .

目錄結(jié)果如下:

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

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

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

4、然后我們編譯一下

npm run asbuild

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

// 假設(shè)存在 release.wasm文件,該文件aad 包含一個(gè)添加2個(gè)提供參數(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)文章

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

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

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

    node.js自動(dòng)上傳ftp的腳本分享

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

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

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了nodejs實(shí)現(xiàn)獲取當(dāng)前url地址及url各種參數(shù)值,本文直接給出代碼實(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),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • NodeJs內(nèi)存占用過高的排查實(shí)戰(zhàn)記錄

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

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

最新評(píng)論

类乌齐县| 呼图壁县| 九龙城区| 桐乡市| 抚顺市| 大冶市| 罗山县| 肃宁县| 易门县| 繁峙县| 周口市| 德州市| 正宁县| 义乌市| 遂宁市| 页游| 宁乡县| 九龙城区| 庆安县| 嘉祥县| 苏尼特右旗| 上虞市| 枣庄市| 定陶县| 大丰市| 和林格尔县| 文登市| 广德县| 余江县| 乐安县| 彭阳县| 洛扎县| 彩票| 遂溪县| 来安县| 紫阳县| 夏河县| 神池县| 孝昌县| 加查县| 汝州市|