WebAssembly
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()
(en-US). - Crear nuevas instancias de memoria y de tablas mediante los constructores
WebAssembly.Memory()
(en-US)/WebAssembly.Table()
(en-US). - Facilitar el manejo de errores que ocurren dentro de un WebAssembly mediante los constructores:
WebAssembly.CompileError()
(en-US)/WebAssembly.LinkError()
(en-US)/WebAssembly.RuntimeError()
(en-US).
Métodos
WebAssembly.instantiate()
(en-US)-
El API primaria para compilar e instanciar código WebAssembly, ambos regresan un
Module
y el primeroInstance
. WebAssembly.instantiateStreaming()
(en-US)-
Compila e instancia un módulo WebAssembly directamente desde un flujo de origen subyacente, ambos regresan un
Module
y el primeroInstance
. WebAssembly.compile()
(en-US)-
Compila un
WebAssembly.Module
(en-US) desde el código binario de un WebAssembly, manteniendo la creación de la instancia como un objeto separado. WebAssembly.compileStreaming()
(en-US)-
compila un
WebAssembly.Module
(en-US) directamente desde un flujo de origen subyacente, manteniendo la creación de la instancia como un objeto sepraado. WebAssembly.validate()
(en-US)-
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()
(en-US)-
Crea un nuevo objeto WebAssembly
Module
. WebAssembly.Instance()
(en-US)-
Crear un nuevo objeto WebAssembly
Instance
. WebAssembly.Memory()
(en-US)-
Crear un nuevo objeto WebAssembly
Memory
. WebAssembly.Table()
(en-US)-
Crear un nuevo objeto WebAssembly
Table
. WebAssembly.CompileError()
(en-US)-
Crear un nuevo objeto WebAssembly
CompileError
. WebAssembly.LinkError()
(en-US)-
Crear un nuevo objeto WebAssembly
LinkError
. WebAssembly.RuntimeError()
(en-US)-
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()
(en-US) , 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
(en-US) compilado y un objeto Instance
(en-US) . Entonces tenemos una llamada a Exported WebAssembly function (en-US) 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