WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如C / C ++等语言提供一个编译目标,以便它们可以在Web上运行。它也被设计为可以与JavaScript共存,允许两者一起工作。

简而言之

对于网络平台而言,WebAssembly具有巨大的意义——它提供了一条途径,以使得以各种语言编写的代码都可以以接近原生的速度在Web中运行。在这种情况下,以前无法以此方式运行的客户端软件都将可以运行在Web中。

WebAssembly被设计为可以和JavaScript一起协同工作——通过使用WebAssembly的JavaScript API,你可以把WebAssembly模块加载到一个JavaScript应用中并且在两者之间共享功能。这允许你在同一个应用中利用WebAssembly的性能和威力以及JavaScript的表达力和灵活性,即使你可能并不知道如何编写WebAssembly代码。

而且,更棒的是,这是通过W3C WebAssembly Community Group开发的一项网络标准,并得到了来自各大主要浏览器厂商的积极参与。

指南

WebAssembly概念
通过阅读WebAssembly后面的高层概念开始——也就是说,它为什么如此有用,它是如何适应网络平台的(以及其他)和如何使用它。
从C/C++编译为WebAssembly
当你使用C/C++编写了代码后,你可以使用诸如Emscripten的工具把它编译为.wasm文件。让我们看看这是如何工作的。
加载运行WebAssembly代码
本文介绍如何通过把Fetch或者XHR API与WebAssembly JavaScript API结合在一起来获取、编译和实例化.wasm文件。
缓存编译后的WebAssembly模块
就提升应用启动速度而言,在客户端缓存大的WebAssembly模块是有用的。本文解释了如何使用IndexedDB来实现这一点。
使用WebAssembly的JavaScript API
当加载了一个.wasm模块之后,你就想要使用它。在本文中,我们向你展示了如何通过WebAssembly的JavaScript API来使用WebAssembly。
导出的WebAssembly函数
导出的WebAssembly函数是WebAssembly函数的JavaScript表现形式,并且允许从JavaScript中调用WebAssembly代码。本文描述它们。
理解WebAssembly的文本格式
本文介绍了wasm的文本格式。这是在进行调试的时候浏览器开发者工具中展现出来的.wasm模块的一种低级文本表示。
把WebAssembly文本格式转换为wasm
本文提供了一个如何把编写的文本格式的WebAssembly模块转换为 wasm二进制的指南。

API参考

WebAssembly
本对象是所有与WebAssembly相关功能的命名空间。
WebAssembly.Module
一个WebAssembly.Module对象包括了无状态的WebAssembly代码。该代码已经被浏览器编译并且能够通过Workers高效地共享缓存到IndexedDB中以及多次实例化。
WebAssembly.Instance
一个对象WebAssembly.Instance对象是一个有状态的、可执行的模块的实例。实例对象包含所有的能够从JavaScript调用到WebAssembly代码的导出的WebAssembly函数
WebAssembly.instantiate()
WebAssembly.instantiate() 函数是编译和实例化WebAssembly代码的主要的API,它返回一个Module及其第一个实例。
WebAssembly.Memory()
一个WebAssembly.Memory 对象是一个可变长的ArrayBuffer。它拥有能够被实例存取的原始字节内存。
WebAssembly.Table()
WebAssembly.Table对象是一个可变长类型数组。它存储诸如函数引用之类的不透明值并且能够被实例存取。
WebAssembly.CompileError()
创建一个新的WebAssembly CompileError对象。
WebAssembly.LinkError()
创建一个新的WebAssembly LinkError对象。
WebAssembly.RuntimeError()
创建一个新的WebAssembly RuntimeError对象。

示例

规范

Specification Status Comment
WebAssembly JavaScript Interface Working Draft Initial draft definition of the JavaScript API.

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support5716522 No4411
CompileError5716522 No4411
Instance5716522 No4411
LinkError5716522 No4411
Memory5716522 No4411
Module5716522 No4411
RuntimeError5716522 No4411
Table5716522 No4411
compile5716522 No4411
compileStreaming61 No58 No47 No
instantiate5716522 No4411
instantiateStreaming61 No58 No47 No
validate5716522 No4411
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support5757 Yes1522 ?117.0
CompileError5757 Yes1522 ?117.0
Instance5757 Yes1522 ?117.0
LinkError5757 Yes1522 ?117.0
Memory5757 Yes1522 ?117.0
Module5757 Yes1522 ?117.0
RuntimeError5757 Yes1522 ?117.0
Table5757 Yes1522 ?117.0
compile5757 Yes1522 ?117.0
compileStreaming6161 No58 ? No No
instantiate5757 Yes1522 ?117.0
instantiateStreaming6161 No58 ? No No
validate5757 Yes1522 ?117.0

1. This feature is behind the Experimental JavaScript Features preference.

2. Disabled in the Firefox 52 Extended Support Release (ESR).

参见

文档标签和贡献者

标签: 
 此页面的贡献者: zhangchen, ldwformat, zhuangyin, kingysu, xgqfrms-GitHub, disoul
 最后编辑者: zhangchen,