Este es otro ejemplo de un software de edición de imágenes completo Adobe Photoshop que está completamente basado en nuestros navegadores web, por lo que puedes hacer todas las operaciones de edición de imágenes directamente dentro del navegador web.
Aquí comparamos JavaScript contra C y WebAssembly para la rutina de nivel blast dexpy. Dexpy multiplica un vector por un escalar y luego suma el resultado a otro vector.
En el gráfico estoy mostrando dos mediciones diferentes de WebAssembly. La primera es WASM y la segunda es WASM copy. Para la primera medición de WebAssembly estoy midiendo el rendimiento de WebAssembly al realizar el cálculo sobre vectores que ya están asignados en el montón del módulo de WebAssembly.
En la segunda medición de WebAssembly, que es WASM copy, estoy midiendo el rendimiento de WebAssembly cuando necesitas copiar datos hacia y desde el módulo de memoria de WebAssembly además de realizar la operación blast.
Así que primero tienes que copiar los datos en el módulo de memoria y luego tienes que hacer la operación.
Este escenario es probablemente más preciso para usar en casos del mundo real, sin embargo, para hacerlo primero necesitas copiar todo el array de datos tipados en la memoria del módulo de WebAssembly y luego copiar los resultados de vuelta después de haber realizado la operación. Así que en este gráfico, como podrías haber esperado, realizar cálculos en WebAssembly sin necesidad de copiar funciona mucho mejor que cuando se necesita copiar, especialmente para rutinas como dexpy donde copiar datos añade una sobrecarga significativa en comparación con la operación real.
Pero lo que puede ser inesperado es que JavaScript todavía funciona bastante bien al comparar con WASM copy. Eso demuestra que especialmente para operaciones más simples usar JavaScript puro está bien. Es solo 2 o 2.
5 veces más lento en comparación con C.
Ha habido algunos esfuerzos más en esta dirección, como Pyodide para ejecutar Python dentro de tus navegadores web y WebR para ejecutar R dentro de tus navegadores web. Pero ahora la gente podría preguntar si es posible simplemente compilar y cargar bibliotecas como numpy y scipy y luego ejecutarlas directamente dentro de los navegadores web.
Aunque esto es posible, hacerlo viene con desventajas significativas en comparación con standard lib, como se puede observar en el gráfico de la derecha, especialmente para conjuntos de datos más pequeños, standard lib supera significativamente a pyodide. Basado en estos gráficos, podemos concluir que standard lib es mejor o igual a otras alternativas basadas tanto en el tiempo de carga como en la velocidad.
Así que hagamos un resumen de lo que acabamos de cubrir.
Primero vimos cómo la vectorización permite un código numérico rápido y legible en JavaScript. Luego vimos el papel de las bibliotecas especializadas para ML y estadísticas como scikit-learn y stats models. Luego también vimos cómo standard lib proporciona arrays indy, funciones universales, APIs matemáticas centrales y mucho más.
También glass y alipack ahora son accesibles dentro de los navegadores web usando standard lib y todo esto está convergiendo en un ecosistema emergente real con, por supuesto, standard lib en su centro. Entonces, ¿cómo puedes involucrarte en todo esto? Bueno, estos dos códigos QR enlazan al repositorio de standard lib y su blog.
Así que si solo sientes contribuir o enfrentar algún problema, puedes simplemente ir y hacer ping al repositorio de GitHub. También puedes leer los blogs de standard lib que se actualizan con bastante regularidad sobre las actividades recientes. Standard lib también participa en Google Summer of Code. Participó el año pasado y este año también.
Comments