WebAssembly定义

WebAssembly是一种的语言,可以在现代浏览器环境中运行,并提供了功能和性能上的优势。可以将其它语言,如C/C++等,编译成Assembly格式的代码,然后在浏览器中运行。

WebAssembly的目标

  • WebAssembly代码可以获得非常快的运行速度。

  • 增加可读性,WebAssembly还有可读的文本格式,易于编写,调试和阅读。

  • WebAssembly具有非常高安全性,它在一个沙箱环境中执行,同时遵守浏览器的同源策略和权限规则。

  • 和其它Web语言有很好的兼容性

WebAssembly工作原理

Web平台有两不分组成组成:a)执行应用程序的虚拟机,b)Web API,例如(DOM,WebGL等)。为了让浏览器支持Assembly,虚拟机实现了加载两种语言(javascript,Assembly)的功能,javascript可以同过Web API引入WebAssembly代码,WebAssembly可以导入和异步执行javascript的模块。

WebAssembly的关键部分概览

  • module:表示由浏览器编译为可执行机器代码的WebAssembly二进制文件。 对于一个模块是无状态的,因此,像Blob一样,可以显式缓存在IndexedDB中,也可以在windows和worker之间共享(通过postMessage())。 A模块像ES2015模块一样声明导入和导出。

  • Memory:一个可调整大小的ArrayBuffer,它包含可以被WebAssembly的低级内存访问指令读取和写入的线性字节数组。

  • Table:一种引用类型的可变素组(例如函数),无法将其作为原始字节存储在存储器中。

  • Instance:module,Memory,Table等得运行实例

一个C++程序转化为Assembly的例子

  • 安装Emscripten

  • 编写c++程序,例如:

#include <stdio.h>int main() {printf("hello, world!\n");return 0;
}
  • 将C++命名,此处命名为hello.c,然后编译输出html代码,编译命令如下:

emcc hello.c -s WASM=1 -o hello.html

编译输出文件如下:

`hello.html
hello.js
hello.js.temp.js`

  • 用浏览器打开hello.html,即可查看效果

WebAssembly基础相关推荐

  1. WebAssembly 基础

    WebAssembly 介绍 官网介绍: WebAssembly 或者 wasm 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.分析一下 WebAssembly 这个词由 Web 和 As ...

  2. 基于WebAssembly的前端视频编辑器设计与实现(个人毕设论文删改)

    前言: 本来想通过一篇更精简通俗易懂的博文讲述的,但是写到一半发现要讲的东西太多,于是太监了,因此我把个人毕设做了一些删改,把工程源码放在了末尾,发出来供各位参考. (2021年10月8日更新了图片, ...

  3. 走近 WebAssembly 之调试大法

    (点击上方公众号,可快速关注) 作者:周志鹏博客 blog.zhouzhipeng.com/debug-webassembly.html 前言 WebAssembly是什么? 下面是来自官方的定义: ...

  4. java web运行的快慢_WebAssembly执行速度真的很强悍吗?对微软Edge很无语

    原标题:WebAssembly执行速度真的很强悍吗?对微软Edge很无语 Firefox一直在WebAssembly上耕耘,在macOS与Windows上表现的都很好,Chrome 67在WebAss ...

  5. 基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api

    TP5_Splider 一个基于Thinkphp5+phpQuery 网络爬虫抓取数据接口 统一输出接口数据api.适合正在学习Vue,AngularJs框架学习 开发demo,需要接口并保证接口不跨 ...

  6. Unity3D学习日记3

    1.Unity资源商店 解析:Unity资源商店中提供了多种游戏媒体资源供下载和购买,例如人物模型.动画.粒子特效.纹理.游戏创作工具.音乐特效.功能脚本和其他类拓展插件等. 2.Unity3D脚本中 ...

  7. 基础为零?如何将 C++ 编译成 WebAssembly

    作者| 张翰(门柳) 出品|阿里巴巴新零售淘系技术部 本文知识点提炼: 1.如何使用 Emscripten 把 C++ 编译成 wasm. 2.如何使用 wasi-sdk 把 C++ 编译成 wasm ...

  8. WebAssembly上手:基础指南

    只需 Web 开发的一般知识就能通过本文轻松上手 WebAssembly.要通过本文的可运行代码示例尝试 WebAssembly,你只需要一个编辑器.任意现代浏览器和本文随附的,带有 C 和 Rust ...

  9. WebAssembly的基础使用方法

    什么是WebAssembly(wasm)? WebAssembly或wasm是一种新的,便携式的,大小和加载时间效率高的格式,适合编译到Web上.-WebAssembly设计 一种二进位表示的新语言, ...

最新文章

  1. Video Player调研
  2. 通用权限管理系统组件 (GPM - General Permissions Manager) - 支持请求
  3. 《Python深度学习》第四章的实验结果图汇总
  4. Linux I/O 模型(待修改)
  5. 入职新公司,如何快速上手公司业务?
  6. (学习笔记)Oracle约束
  7. iOS-关于iOS开发架构的搭建
  8. 新视野大学英语(第三版)读写教程4答案
  9. SIFT(Scale Invariant Feature Transform) 算法小结及实验
  10. 抖音视频什么时候投放dou+最好,dou+投放实战总结:国仁网络资讯
  11. Excel 合并当前工作簿全部工作表的VBA代码
  12. INVECAS发布全球首创的HDMI(R)2.1,搭载HDCP2.3芯片和IP解决方案,适用于电视、AVR、条形音响和机顶盒
  13. 2021年CKA考试真题(一)CKA考试介绍
  14. Java8使用jdeps —— Java类依赖性分析器
  15. Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
  16. 关于Mysql服务无法启动的问题
  17. PyPDF2--如何使用python操作你的PDF文档
  18. 从系统托盘中删除Synaptics触摸板图标
  19. 29【定时器和延时器】
  20. Excel TEXT函数怎么把数值转换成文本

热门文章

  1. Go语言中的Struct
  2. 关于VS的解决方案sln无法设置某些工程的依赖项的问题的解决方法
  3. Java 初始化顺序
  4. SpringCloud之分布式配置中心(六)
  5. struct ifconf和struct ifreq,获取网线插入状态
  6. 关于写代码的几个看法
  7. IIS的虚拟目录和子应用程序
  8. 管理邮件用户(附图)---Michaelf
  9. boost 线程、互斥体、条件变量
  10. excel in python