MDN will be in maintenance mode on Thursday September 21st, starting at 10 AM Pacific / 5 PM UTC, for about 1 hour.

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

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

简而言之

对于网络平台而言,WebAssembly具有巨大的意义——这为客户端app提供了一种在网络平台以接近原生速度的方式运行多种语言编写的代码的方式;在这之前,客户端app是不可能做到的。

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,它返回一个模块以及该模块的第一个实例。
WebAssembly.Memory()
一个WebAssembly.Memory 对象是一个可变大的ArrayBuffer。它拥有能够被实例存取的原始字节内存。
WebAssembly.Table()
一个WebAssembly.Table对象是一个可变的大小的带类型数组。它存储诸如函数引用之类的不透明值并且能够被实例存取。
WebAssembly.CompileError()
创建一个新的WebAssembly编译错误对象。
WebAssembly.LinkError()
创建一个新的WebAssembly链接错误对象。
WebAssembly.RuntimeError()
创建一个新的WebAssembly运行时错误对象。

示例

规范

规范 状态        评论
Web Assembly JavaScript API Draft JavaScript API的初始草案定义。

浏览器兼容性

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 57 15[2] 52 (52)[1] 未实现 44 11
Feature Android Webview Chrome for Android Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 57 57 未实现 52.0 (52)[1] 未实现 未实现 11

[1]在Firefox 52+中,WebAssembly默认启用,不过,在Firefox Firefox 52 Extended Support Release (ESR.)中默认禁用。

[2] Currently supported behind the “Experimental JavaScript Features” flag. See this blog post for more details.

另见

文档标签和贡献者

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