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. LFS(Linux From Scratch)构建过程全记录(三):下载所需的软件包

    写在前面 本文将记录构建LFS的过程中,下载软件包的全过程 准备下载的路径 注意请确保$LFS已经设置完毕 我们需要创建一个文件夹,地址为$LFS/sources,用于保存对应的源码 输入的指令如下: ...

  2. ES6之前,JS的继承

    继承的概念 谈到继承,就不得不谈到类和对象的概念. 类是抽象的,它是拥有共同的属性和行为的抽象实体. 对象是具体的,它除了拥有类共同的属性和行为之外,可能还会有一些独特的属性和行为. 打个比方: 人类 ...

  3. aspnetcore6.0源代码编译调试

    虽然编译源码折腾了几个时间(卡在restore),最后还是跑起来了aspnetcore6.0mvc源码项目,下面说步骤,前提是网络能连外,对于不能连外的懒得折腾. 第一步 电脑找个地克隆下GitHub ...

  4. Kibana:运用索引模式的 formatter 来探索 IP 信息

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/107484674

  5. ELK日志报警插件ElastAlert并配置钉钉报警

    文章转载自:https://www.cnblogs.com/uglyliu/p/13118386.html ELK日志报警插件ElastAlert 它通过将Elasticsearch与两种类型的组件( ...

  6. Kubernetes 存储卷详解

    转载自:https://mp.weixin.qq.com/s/Ywx3ju6FP0IShOgI757XYA Volumes 默认情况下容器中的磁盘文件是非持久化的,对于运行在容器中的应用来说面临两个问 ...

  7. Elasticsearch: rollover API

    rollover使您可以根据索引大小,文档数或使用期限自动过渡到新索引. 当rollover触发后,将创建新索引,写别名(write alias)将更新为指向新索引,所有后续更新都将写入新索引. 对于 ...

  8. 使用filebeat过滤掉部分字段

    host,agent,ecs三个字段也是不让drop的 processors: - drop_fields: fields: ["log","input",&q ...

  9. 迁移阿里云上的ECS操作说明

    背景: 1.公司测试服务器快要到期了,但是续费太贵,就想用另一个阿里云账号下的服务器作为测试服务器. 2.测试服务器原在阿里云账号A下,要迁移到阿里云账号B下 3.该测试服务器有一个系统盘和俩数据盘 ...

  10. 使用Jumpserver堡垒机管理MySQL应用

    第一步,添加系统用户 资产管理,系统用户,创建<数据库协议>MySQL 用户名和密码填写实际可以访问数据库的用户名和密码 第二步,添加应用 应用管理,数据库 主机和端口填写可以访问数据库的 ...