Así que el procesamiento de todo el código de JavaScript es bastante grande y lleva algo de tiempo. Mientras que VASM, como se dice, es compilación anticipada. Así que en el momento de la compilación, el compilador puede predecir. Qué tipos de datos esperar, y no tiene que seguir reoptimizando tu código, eso ahorra una cantidad de tiempo bastante notable. Las variables de JavaScript son dinámicas. Por ejemplo, si has hecho let a es igual a cinco y luego puedes decir a es igual a una cadena, ¿verdad? Puedes cambiar el tipo, el tipo de datos en JavaScript y el compilador just in time tiene que mantener un seguimiento constante de esto. Pero en VASM, dado que es fuertemente tipado. No puedes tener esta actualización constante de tipos de datos y por lo tanto se puede lograr una gran cantidad de optimización de tiempo en la CPU con esto.
Y por último, pero no menos importante, los objetos de JavaScript viven en el heap de recolección de basura. Así que como mencioné, dado que JavaScript es un lenguaje de alto nivel, no tenemos el control de cuándo asignar o desalojar la memoria, el recolector de basura de JavaScript hace eso por nosotros. Mientras que en VASM utiliza memoria lineal, veamos eso en un diagrama corto. Así que como puedes ver en el pipeline de ejecución de JavaScript, el navegador primero analiza el código, intenta compilar just in time, intenta optimizarlo, luego intenta reoptimizar si entiende que los tipos de variables están cambiando, intenta ejecutar el código y en la etapa posterior intenta recolectar basura para liberar la memoria.
En WebAssembly, como puedes ver, el pipeline es mucho más simple y como resultado, mucho más rápido también. Solo tiene que decodificar y dado que en el momento de la compilación sabe y es predecible, no tiene que compilar constantemente, optimizar constantemente y reoptimizar el WebAssembly. Entonces, bueno, si estamos viendo una ganancia tan grande, ¿debería reescribir todas mis aplicaciones de JavaScript existentes en Rust? Bueno, no lo creo. Ha habido una tendencia reciente de que muchas personas están migrando sus aplicaciones existentes, aplicaciones de JavaScript a Rust, pero ese no es el mejor enfoque. Hay algunas advertencias, por supuesto. Así que la primera y mayor advertencia, el primer gran obstáculo para la adopción de VASM es que no puedes acceder directamente al DOM desde VASM.
Comments