WebAssembly
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.
El objeto WebAssembly
de JavaScript actua como un namespace para todas las funcionalidades realcionados con WebAssembly.
A diferencia de otros objetos globales, WebAssembly
no tiene un constructor (no tiene una función para crear el objeto). Puedes ser comparado con el objeto Math
, que también es un namespace, para funciones y constantes matemáticas, o también con Intl
que es un namespace para internacionalización y otras funciones de idioma.
Descripción
Los usos primarios para el objeto WebAssembly
son:
- Cargar código WebAssembly, utilizando la función
WebAssembly.instantiate()
. - Crear nuevas instancias de memoria y de tablas mediante los constructores
WebAssembly.Memory()
/WebAssembly.Table()
. - Facilitar el manejo de errores que ocurren dentro de un WebAssembly mediante los constructores:
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
.
Métodos
WebAssembly.instantiate()
-
El API primaria para compilar e instanciar código WebAssembly, ambos regresan un
Module
y el primeroInstance
. WebAssembly.instantiateStreaming()
-
Compila e instancia un módulo WebAssembly directamente desde un flujo de origen subyacente, ambos regresan un
Module
y el primeroInstance
. WebAssembly.compile()
-
Compila un
WebAssembly.Module
desde el código binario de un WebAssembly, manteniendo la creación de la instancia como un objeto separado. WebAssembly.compileStreaming()
-
compila un
WebAssembly.Module
directamente desde un flujo de origen subyacente, manteniendo la creación de la instancia como un objeto sepraado. WebAssembly.validate()
-
Valida un arreglo con tipo de código binario de un WebAssembly, regresando si los bytes son código válido WebAssembly (
true
) o de lo contrario (false
).
Constructores
WebAssembly.Module()
-
Crea un nuevo objeto WebAssembly
Module
. WebAssembly.Instance()
-
Crear un nuevo objeto WebAssembly
Instance
. WebAssembly.Memory()
-
Crear un nuevo objeto WebAssembly
Memory
. WebAssembly.Table()
-
Crear un nuevo objeto WebAssembly
Table
. WebAssembly.CompileError()
-
Crear un nuevo objeto WebAssembly
CompileError
. WebAssembly.LinkError()
-
Crear un nuevo objeto WebAssembly
LinkError
. WebAssembly.RuntimeError()
-
Crear un nuevo objeto WebAssembly
RuntimeError
.
Ejemplos
Después de obtener algún bytecode de WebAssembly usando la sentencia fetch, nosotros compilamos e instanciamos el módulo usando la función WebAssembly.instantiate()
, importando una función de JavaScript en el WebAssembly Module en el proceso. Esta premisa resuelve a un objeto (result
) que contenga un objeto Module
compilado y un objeto Instance
. Entonces tenemos una llamada a Exported WebAssembly function que es exportada por Instance
.
var importObject = {
imports: {
imported_func: function (arg) {
console.log(arg);
},
},
};
fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => WebAssembly.instantiate(bytes, importObject))
.then((result) => result.instance.exports.exported_func());
Nota:
Ver index.html en GitHub (view it live also) para un ejemplo que hace uso de la función fetchAndInstantiate()
.
Especificaciones
Specification |
---|
WebAssembly JavaScript Interface # webassembly-namespace |
Compatibilidad con navegadores
BCD tables only load in the browser