1      WebAssembly简介

WebAssembly是一种新兴的Web技术,网上的资料并不是很多,简单的可以理解为让C/C++程序运行在浏览器上,官网上用四个词来描述该技术:高效、安全、开放、标准。

1.1      高效

C/C++代码被编译成.wasm的二进制格式文件,其目标是充分发挥硬件能力已达到原生执行效率。

1.2      安全

WebAssembly应用运行在一个沙箱化的环境中,对外只暴露特定的接口,并且在Web环境中,WebAssembly将会严格遵守浏览器的一些安全策略。

1.3      开放

.wasm文件是二进制格式文件,不便于理解,但WebAssembly在将来可以直接通过浏览器查看wasm模块的源码。

1.4      标准

WebAssembly可以被JavaScript调用,同时也可以像WebAPI一样调用浏览器的功能。

2      工具安装

编写WebAssembly应用所需的工具比较多,主要包含有浏览器(新版的chrome、firefox)、C/C++开发环境、Web环境、Emscripten编译器。这里面最麻烦的就是Emscripten编译器的安装,Emscripten是把C/C++程序编译成浏览器运行的wasm文件以及对应的JS代码的编译器,主要有两种安装方式(已windows环境为例):

2.1      在线安装

在线安装比较容易出错,需要安装git并能访问github开源社区,参考官网:http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html,步骤如下:

2.1.1        克隆emsdk仓库

git clone https://github.com/juj/emsdk.git,这一步容易报Timed out错误:

可以参考w3上面的解决方法:http://3ms.huawei.com/hi/group/1503847/thread_5329623.html?mapId=6456777&t_type=ask

2.1.2        安装工具

cd emsdk           // 定位到emsdk文件夹

emsdk update       // 执行更新

emsdk install latest   // 安装各种工具

emsdk activate latest  // 生成.emscripten文件,激活配置

2.2      离线安装

离线安装比较简单,在官网http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html下载离线包emsdk-1.35.0-full-64bit.exe,里面集成了所需的各种工具,如clang、node、python、emscripten等,下载完成后直接运行就可以完成上述软件的安装,安装完成后的目录结构如下:

2.2.1        验证安装结果

打开cmd,输入emcc –v,提示如下信息则表示安装成功:

如果提示emcc不是内部或外部命令,去检查一下.emscripten文件,.emscripten文件在当前用户所在的文件夹中(C:\Users\你的用户名),正常安装后的内容为:

3      应用搭建

3.1      编写C/C++程序

代码说明如下:

1、  当对应的js文件被加载时,main方法自动执行,printf翻译成console.log;

2、  EMSCRIPTEN_KEEPALIVE修饰的方法表示是要导出的方法,这些方法才能生成对应的API,供js调用,API名一般为下划线+方法名,即是说_addTest、_subTest。

3.2      编译.c文件为js代码

打开cmd,输入以下指令:emcc index.c –s WASM=1 –O3 –o index.js,参数解释如下:

1、emcc:代表Emscripten编译器;

2、index.c:C代码的文件;

3、-s WASM=1:指定使用WebAssembly;

4、-O3:代码优化级别;

5、-o index.js:生成wasm模块的全部文件,包含.wasm文件和.js文件等。

emcc参数的详细说明可以参考官网介绍:http://kripken.github.io/emscripten-site/docs/tools_reference/emcc.html#emccdoc

编译结果如下:

包含如下文件:

3.3      搭建Web运行环境

3.3.1        目录结果

3.3.2        index.html代码

3.3.3        index.js代码

在emscripten编译的index.js代码基础上增加如下代码:

3.3.4        页面效果

浏览器访问对应的地址,点击等号,能完成_addTest()和_subTest()方法的调用,页面如下:

3.4      总结

上述应用,通过一个简单的例子实现了通过浏览器来执行C/C++代码,WebAssembly API的具体介绍可以参考官网:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly。

简单的WebAssembly应用搭建的更多相关文章

  1. 最简单的SVN环境搭建过程

    本文简单描述最简单的SVN环境搭建过程 搭建环境:windows (个人验证了windows2003,windows xp) 使用软件:Setup-Subversion-1.6.17  //Serve ...

  2. Elasticsearch简单使用和环境搭建

    Elasticsearch简单使用和环境搭建 1 Elasticsearch简介 Elasticsearch是一个可用于构建搜索应用的成品软件,它最早由Shay Bannon创建并于2010年2月发布 ...

  3. SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建

    SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...

  4. EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。

    EpiiAdmin EpiiAdmin php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js, 让复杂的交互变得更简单!Phper快速搭建交互性平台的 ...

  5. Python实现一个简单三层神经网络的搭建并测试

    python实现一个简单三层神经网络的搭建(有代码) 废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层.本文所构建的神经网络隐藏层只有一层.一个神经网 ...

  6. 简单谈谈eclipse下搭建PhoneGap环境来开发Android程序 - linux86(转)

    原来在逛园子的时候一不小心发现了一个新概念“PhoneGap”简称PG,我一直都喜欢追逐新事物,自然就产生了好奇心.于是乎我就在百度上面Google了一下PhoneGap是什么东西.简单的说就是用另一 ...

  7. asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用

    摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...

  8. asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦

    学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...

  9. 简单的SSM框架搭建教程

    简单的ssm框架的搭建和配置文件 ssm框架里边的配置: 1.src路径下直接存放数据库和log4j的properties文件 2.src路径下建个config包,分别放置ssm的xml文件 3.修改 ...

  10. 简单的SpringBoot环境搭建

    开始搭建前请确认您的计算机中的Maven已正确配置 一:使用IDEA创建一个Maven项目,图中第一个指针请选择自己正在使用的JDK版本,指针二请打勾,选中指针三所指向的类型并点击Next 二:填写G ...

随机推荐

  1. angr原理与实践(二)—— 各类图的生成(CFG CG ACFG DDG等)

    ​  本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 上一篇文章介绍了angr的原理,自此篇文章开始, ...

  2. 基于 iframe 的微前端框架 —— 擎天

    vivo 互联网前端团队- Jiang Zuohan 一.背景 VAPD是一款专为团队协作办公场景设计的项目管理工具,实践敏捷开发与持续交付,以「项目」为核心,融合需求.任务.缺陷等应用,使用敏捷迭代 ...

  3. 【Spring】Spring bean中id和name的差异

    id和name都是spring 容器中中bean 的唯一标识符. id: 一个bean的唯一标识 , 命名格式必须符合XML ID属性的命名规范 name: 可以用特殊字符,并且一个bean可以用多个 ...

  4. 人脸识别、活体检测(眨眼、摇头、张嘴动作)clmtrackr

    人脸识别.活体检测(眨眼.摇头.张嘴动作)项目总结 项目需求 / 步骤实现描述: 1.申请摄像头权限,开始识别面部信息.同时开始录像 : 2.随机顺序生成面部检验动作: 3.并开始倒计时,需10s内完 ...

  5. K8s deployments的故障排查可视化指南已更新(2021 中文版)

    转载自:https://mp.weixin.qq.com/s/07S930e6vsN2iToo0gP0zg 英文版 高清图地址:https://learnk8s.io/a/a-visual-guide ...

  6. 使用port-forward访问集群中的应用程序,以Redis 为例

    为Redis创建Deployment和Service 创建 Redis Deployment,YAML文件如下: apiVersion: apps/v1 kind: Deployment metada ...

  7. 关于使用git传输文件到GitHub

    git status(查看本地git仓库情况) git add "文件名(精确到文件拓展名)" git commit -m "说明"(提交到上传缓存区域) gi ...

  8. 关于HM NISEDIT在新版系统下编译并运行提示权限不足问题的解决方案

    如果你使用过NSIS为你的项目制作过安装包,那HM nisedit一定是你绕不过去的槛,作为NSIS号称的最佳免费IDE/编辑器,功能齐全,与NSIS配合性能强悍,实至名归.只是开发作者最后版本更新在 ...

  9. Docker | 部署nginx服务

    容器时相互隔离的,docker启动的nginx是容器内的服务,不影响我原先服务器上的nginx服务,小伙伴们可大胆尝试 本篇实在linux环境下操作的,主要目的是夺人眼目,对使用Docker部署服务尝 ...

  10. hibernate validation 手动参数校验 不经过spring

    /** * 校验工具类 * @author wdmcygah * */ public class ValidationUtils { private static Validator validato ...