Como sabéis, la máquina virtual que usa Adobe Flash para el código ActionScript 3, está basada en el proyecto Tamarin de la Fundación Mozilla. Esto quiere decir, que aunque AS3 sea un superconjunto de Javascript, comparte gran parte de la base de código utilizada en TraceMonkey, que a su vez se usa por ejemplo en Firefox, para la ejecución de Javascript.
En Rendimiento Javascript vs VBScript, analizaba las diferencias de rendimiento que había bajo Internet Explorer a la hora de ejecutar el mismo código en VBScript y Javascript. Luego en Benchmark de CPU/FPU en Flash, hacía un análisis del rendimiento en lo que a cálculos se refiere desde Flash. Sin embargo quedaba un tema pendiente…
Dado que según se ha visto, la ejecución de código en la VM, es bastante común en Firefox y Flash, cabría pensar que a nivel de rendimiento fueran muy parejos. No obstante, también podríamos pensar que como históricamente Flash ha generado aplicaciones más complejas que Javascript, el equipo de FutureSplash/Macromedia/Adobe, hubiera realizado trabajos especiales en su optimización.
He aprovechado (otra vez), el código de cálculo de números primos en Javascript, VBScript, y ActionScript 3, y lo he ejecutado en diferentes entornos. Estos han sido los resultados:
– Javascript (Safari 4.0.4): 1044 ms.
– Javascript (Iron 4.0.280): 1906 ms.
– Javascript (Opera 10.50.3236): 2038 ms.
– Javascript (Firefox 3.7a1 20100121 x64): 2148 ms.
– Javascript (Firefox 3.7a1 20100121 x86): 2192 ms.
– Actionscript (Flash 10): 3586 ms.
– VBScript (Internet Explorer 8.0.7600.16385 x64): 5810 ms.
– VBScript (Internet Explorer 8.0.7600.16385 x86): 8080 ms.
– Javascript (Internet Explorer 8.0.7600.16385 x64): 8140 ms.
– Javascript (Internet Explorer 8.0.7600.16385 x86): 9230 ms.
Observamos, que el rendimiento, no es en absoluto parejo, y Flash 10 se muestra alrededor de 2 veces más lento que Firefox en cuanto a desempeño. Personalmente una gran sorpresa para mi, que he vivido en mis propias carnes las grandes mejoras de velocidad con la VM de AS3 comparada con la anterior de AS2.
Debemos aclarar que como cualquier benchmark sintético, puede no ser representativo de la realidad, aunque si que debe dar una idea clara de la velocidad a la que uno y otro pueden realizar cálculos puros. Ello no quiere decir que otras funcionalidades, en particular dibujo en pantalla, etc, puedan ser más eficientes en ActionScript 3 que en Javascript, aunque en todo caso, eso sería parte de un futuro artículo.
Puedes probarlo tu mismo descargando todostodos los fuentes aquí (6 Kb. en formato ZIP).