当前位置: 首页 > 面试题库 >

如何从node.js使用WebAssembly?

闾丘文昌
2023-03-14
问题内容

我目前正在开发一个个人Node.js(>=8.0.0)项目,该项目要求我调用C子例程(以缩短执行时间)。我试图使用WebAssembly来执行此操作,因为我需要最终代码在浏览器中打开时才兼容。

我已经使用Emscripten将C代码编译为WebAssembly,但之后不知道如何进行。

在正确方向上的任何帮助都将非常有用。谢谢!


问题答案:

您可以构建没有JS胶水文件的.wasm文件(独立)。

创建一个test.c文件:

int add(int a, int b) {
  return a + b;
}

生成独立的.wasm文件:

emcc test.c -O2 -s WASM=1 -s SIDE_MODULE=1 -o test.wasm

在Node.js应用中使用.wasm文件:

const util = require('util');
const fs = require('fs');
var source = fs.readFileSync('./test.wasm');
const env = {
    memoryBase: 0,
    tableBase: 0,
    memory: new WebAssembly.Memory({
      initial: 256
    }),
    table: new WebAssembly.Table({
      initial: 0,
      element: 'anyfunc'
    })
  }

var typedArray = new Uint8Array(source);

WebAssembly.instantiate(typedArray, {
  env: env
}).then(result => {
  console.log(util.inspect(result, true, 0));
  console.log(result.instance.exports._add(9, 9));
}).catch(e => {
  // error caught
  console.log(e);
});

关键部分是WebAssembly.instantiate()的第二个参数。没有它,您将收到错误消息:

TypeError:WebAssembly实例化:Imports参数必须存在,并且在启动时位于Function.Module.runMain(module.js:695:11)的process._tickCallback(internal
/ process /
next_tick.js:188:7)处(bootstrap_node.js:191:16)在bootstrap_node.js:612:3



 类似资料:
  • Node.js v22中,WebSocket如何使用? 希望得到代码案例。

  • 我遵循了下一个教程:http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/ 过了几天,我就把一切都做好了,但是更新用户数据库是读者自己的事。 我已经编辑了翡翠模板,并添加了一些javascript,用于更新链接上的点击事件。我甚至可以从列出的测试用户那里检索用户ID。用警报测试了这个,可以了。

  • 问题内容: 我想从我的node.js应用程序ping服务器。 那可行吗? 谢谢 问题答案: 您可以用来调用系统ping命令

  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我对这种东西是陌生的,但是最近我已经听到很多关于Node.js有多出色的信息。考虑到我一般喜欢使用jQuery和JavaScript有多少,我不禁想知道如何决定何时使用Node.js。我想到的Web应用程序有点像Bitly-需要一些内容,然后将其存档。 从过去几天我所做的所有作业中,我获得

  • 我是新手,但最近我听到很多关于Node.js有多好的消息。考虑到总体上我是多么热爱使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js。我心目中的web应用程序类似于Bitly-获取一些内容,并将其存档。 从过去几天我一直在做的所有作业中,我获得了以下信息。node.js 是一个命令行工具,可以作为常规web服务器运行,允许运行JavaScript程序 使用great

  • 问题内容: 我应该如何使用Node.js解析JSON?是否有一些模块可以安全地验证和解析JSON? 问题答案: 你可以简单地使用。 JSON对象的定义是ECMAScript 5规范的一部分。node.js基于Google Chrome的V8引擎构建,该引擎遵循ECMA标准。因此,node.js也有一个全局对象。JSON 注意- 可以占用当前线程,因为它是一种同步方法。因此,如果你打算解析大型JSO