MALOUDA-PSA 2024-04-21 19:24 采纳率: 90.9%
浏览 2
已结题

webassembly的问题

emcc -O3 --no-entry -o ./out/fibc.wasm ./src/fib.c
emcc -O3 -sMODULARIZE -o ./out/fibemccesm.mjs ./src/fib.c


//js:
import init from './out/fibemccesm.mjs'

问题: wasm 和 mjs 都是从一个文件编译过来的,
为什么需要 wasm 和 mjs 这两个编译结果,为什么init 会在 mjs 里面 ?

  • 写回答

4条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-21 19:25
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    WebAssembly是一种低级字节码,它可以在现代浏览器中提供接近本地代码的性能。而MJS是ES6模块所使用的模块化文件格式。它们之所以同时存在是因为:

    1. WebAssembly具有较高的性能和二进制文件的小尺寸,适合处理一些性能要求高的计算操作。

    2. MJS提供了更清晰的JS API和相对更加容易调用,适合处理在JS中构建的库和应用程序,以及更直观。

    因此,对于一些需要复杂计算的模块和库,可以编译成WebAssembly的格式,使其在浏览器中得到更快的性能。对于一些比较通用和易于发展的库,可以编译成MJS格式,并通过import语句加载它们。 对于上述的问题,可以得出以下解决方案:

    1. 如果你需要在JS中引用C的库,就可以将C代码编译为WebAssembly格式,这样可以获得较高的性能。编译命令可以使用‘emcc -O3 --no-entry -o ./out/fibc.wasm ./src/fib.c’。

    2. 如果你需要通过import语句加载一个JS模块并在应用程序中使用它,则需要将JS代码编译为MJS。编译命令可以使用‘emcc -O3 -sMODULARIZE -o ./out/fibemccesm.mjs ./src/fib.c’。

    3. 使用import语句从MJS中加载模块,可以使用将ES6模块导入到模块对象的方式。如:import init from './out/fibemccesm.mjs'。

    最终,可以通过同时使用WebAssembly和MJS两种文件格式, 在JS中使用更高效的计算操作,同时也可以通过import语句加载库和通用代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月21日

悬赏问题

  • ¥15 深度学习残差模块模型
  • ¥20 两个不同Subnet的点对点连接
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)