WebAssembly也叫浏览器字节码技术 这里就不过多的解释了网上很多介绍

主要是让大家知道在js里面如何调用执行它,我之前看WebAssemblyAPI时候反正是看得一脸懵逼

也是为了大家能更快的入手这个比较新的技术吧

这边写的一个dom是官方推荐的c/c++编译的

c代码

1 int add (int x, inty) {2 return x +y;3 }4

5 int square (intx) {6 return x *x;7 }

属性c但是对字节码不熟悉的朋友可能会不理解,为什么没有main函数

这里主要是把这个c代码当成一个模块调用不需要它自己执行所以没有,官方也有有main函数的能直接生成js和html但是太过雍于,

这种方式比较推荐,也是让js能直接调用比较方便

之后使用 emscripten进行编译  emcc math.c -Os -s WASM=1 -s SIDE_MODULE=1 -o math.wasm

然后就有math.wasm文件了,如果没装emscripten的话我博客里面有一篇是关于安装的

有了math.wasm文件后就该用js调用它了

新建math.html加入调用的方法如下:

1

2

3

4

5

6

7

Document

8

9

10

11

12

13

14 /**15 * @param {String} path wasm 文件路径16 * @param {Object} imports 传递到 wasm 代码中的变量17 */

18 functionloadWebAssembly (path, imports={}) {19 returnfetch(path)//加载文件

20 .then(response=>response.arrayBuffer())//转成 ArrayBuffer

21 .then(buffer=>WebAssembly.compile(buffer))22 .then(module=>{23 imports.env=imports.env||{}24

25 //开辟内存空间

26 imports.env.memoryBase=imports.env.memoryBase|| 0

27 if(!imports.env.memory) {28 imports.env.memory= newWebAssembly.Memory({ initial:256})29 }30

31 //创建变量映射表

32 imports.env.tableBase=imports.env.tableBase|| 0

33 if(!imports.env.table) {34 //在 MVP 版本中 element 只能是 "anyfunc"

35 imports.env.table= newWebAssembly.Table({ initial:0, element:'anyfunc'})36 }37

38 //创建 WebAssembly 实例

39 return newWebAssembly.Instance(module, imports)40 })41 }42 //调用

43 loadWebAssembly('./math.wasm')44 .then(instance=>{45 const add=instance.exports._add//取出c里面的方法46 const square=instance.exports._square//取出c里面的方法47

48 console.log('10 + 20 =', add(10,20))49 console.log('3*3 =', square(3))50 console.log('(2 + 5)*2 =', square(add(2 + 5)))51 })52

53

54

55

js怎么调用wasm_对于WebAssembly编译出来的.wasm文件js如何调用相关推荐

  1. 对于WebAssembly编译出来的.wasm文件js如何调用

    https://www.cnblogs.com/y-y-y-y/p/9897154.html

  2. c 编译易语言dll文件,易语言调用DLL的问题(付dll文件,VC++编译的)

    AA直译器v1.02.rar (795.15 KB, 下载次数: 143) 2012-11-27 17:23 上传 点击文件名下载附件 dll说明: CE自动汇编直译器: AA引擎 各语言通用DLL ...

  3. swift项目调用OC库 和OC项目 在swift文件里面全局调用OC库

    最近比较清闲,就把以前学习的过程记录下吧,多少年后如果能在互联网上找到自己的痕迹,想想还是一件蛮值得高兴的事情. 正好这两天加了一个swift学习群想继续学习swift,发现好多swift初学者,在混 ...

  4. 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件

    转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...

  5. C++模板编译与C++编译机制在多文件编译时的冲突

    C++模板编译 C++模板编译要编译两次. 以函数模板为例: 第一次编译检查语法 第二次编译生成具体的模板函数 第一次编译发生在正常的编译期间,第二次编译发生在函数模板调用期间. C++编译机制 C+ ...

  6. JS数据类型及函数的预编译

    1.JS总体上分为:原始值和引用值 原始值分为:Number.Boolean.String.undefined.null;原始值不可改变的值,存储在栈[stack]的,先进后出! 引用值:array. ...

  7. ajax调用java程序,从微信小程序到鸿蒙JS开发-JS调用Java

    除轻量级智能穿戴设备,现鸿蒙支持的手机.汽车.TV.手表.平板等属于富鸿蒙,在JS语言的项目中也有Java模块,并提供了JS跨语言调用Java方法的技术.现需要实现查看商品评论时,统计出长评.中评和短 ...

  8. JavaScript专题(一)变量提升与预编译,一起去发现Js华丽的暗箱操作

    JavaScript之变量与函数提升 相信阅读完<前端进阶系列>的朋友们已经对Js中经典的知识点有所了解.本系列的第一篇选择了一个值得讨论的问题--变量提升,我们会从遇到问题.分析问题.解 ...

  9. js中的函数、预编译、DOM的引入

    DOM引入 /* 面向对象 基于事件 点击 (单击 双击 )onclick 滚动条 onscroll * 聚焦 onfocus 离焦 onblur * 按下键盘 onkeydown 抬起键盘 onke ...

最新文章

  1. linux日志管理命令详解
  2. 多媒体指令(灰度像素最大值)
  3. 在Qt调用OpenCV库编写GUI程序
  4. Ubuntu下的固件分析Binwalk的安装
  5. 项目需求分析与建议-NABCD模型
  6. 回归统计在DMP中的实战应用
  7. [Poi2011]Tree Rotations线段树合并
  8. iOS uiviewcontroller 添加另外一个controller的View
  9. win10雷电3接口驱动_技嘉推出B550 主板首发雷电3接口:40Gbps速率、Intel主控
  10. 接口缺方法调用时报错_TypeScript真香系列——接口篇
  11. linux设置自动关机命令,Linux怎么用命令设置自动关机
  12. VS2015卸载经过
  13. rlm sql mysql.so_安装freeradius
  14. word中插入或更新自动目录后,正文内容也变成了目录的问题
  15. 【沧小海笔记】之基于FPGA的以太网设计相关知识——第二章 物理层介绍(基于88E1111)
  16. 粒子群算法求解多元函数最值问题
  17. gpu版本pytorch配置
  18. 3D着色器(OpenGL)
  19. Verilog四位全加器
  20. [软件工程] 面向对象设计

热门文章

  1. win8配置mysql5.6,win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装
  2. 使用rpm包升级ntpd服务_服务器准备升级,小程序将暂停使用
  3. DM3730 LCD控制器驱动框架
  4. Linux Kbuild文档 3
  5. 判断字段长度大于某长度_判断数据库性能只能通过count(*)?No,这些优化方案了解一下!...
  6. 机器学习复制粘贴笔记要点
  7. arcgis选出点规定范围的面
  8. 【转】C# HttpWebRequest 异常时获取 HttpWebResponse 数据
  9. 【转】Windows Server 2012 R2 双网卡绑定
  10. Sharepoint学习笔记 –架构系列—12 Sharepoint的客户端对象模型(Client Object Model)