webkit logoLos principales motores de navegadores están preparando a JavaScript como plataforma de aplicaciones. Y así como Mozilla está preparando a TraceMonkey y Google tiene a Chrome, la gente de WebKit no se queda quieta y está preparando a SquirellFish Extreme, la próxima versión del motor JavaScript.

El jueves pasado WebKit anunció SquirrelFish Extreme (o SFX para abreviar), el próximo motor JavaScript de WebKit. SquirellFish Extreme utiliza varias técnicas más avanzadas, incluyendo una generación veloz de código nativo, que permite lograr un increible rendimiento en la ejecución.

¿Qué tan rápido es?

El gráfico siguiente compara la velocidad de SquirrelFish Extreme contra versiones anteriores del motor de WebKit. Las barras representan "ejecuciones de SunSpider por minuto", con lo cual barras más largas significan mejor rendimiento.

squirrelfish extreme performance

Como se ve en el gráfico, SquirelFish Extreme es casi dos veces más rápido que SquirrelFish, y casi 10 veces más rápido que el motor incluido originalmente en Safari 3.0 (¡hace menos de un año atrás!). Y si bien el resultado es impresionante, todavía se esperan más mejoras.

¿Qué lo hace tan rápido?

SquirrelFish Extreme usa varias tecnologías que le permiten lograr un mejor rendimiento al compararlo con SquirrelFish

Se trabajó en lograr optimizaciones al bytecode. Muchas de las operaciones JavaScript son altamente polimórficas: tienen un comportamiento diferente dependiente en caso. Al verificar primero los casos más frecuentes se logró un mejor rendimiento en los programas JavaScript. Además se incluyeron muchísimas mejoras al set de instrucciones del bytecode, lo que acelera la mayoría de las operaciones .

Por otro lado, se incluye un caché en línea polimórfico, una de las características más interesantes de SquirrelFish Extreme. En la mayoría de los programas, muchos objetos se usan como estructuras. Por ejemplo, varias librerias JavaScript diseñan objetos que representan las coordenadas "x, y", y el objeto sólo existe para contener estos datos. Sabiendo esto se pueden optimizar los casos en los que muchos objetos tienen la misma estructura que los soporta: como dice la comunidad de lenguajes dinámicos, "se puede hacer trampa mientras no te atrapen".

Recién se está empezando con esta técnica, y ya hay varias ideas dando vueltas sobre como seguir mejorandola para tener aún mejores rendimientos.

Otra técnica nueva es la generación de código nativo, a través de un Compilador Justo a Tiempo (JIT). Por ahora la generación de código es para plataformas x86 de 32 bits, pero próximamente se agregará soporte para otras arquitecturas. Los CPU que no son compatibles pueden seguir funcionando con el interprete.

Además se agrega un compilador JIT de expresiones regulares logrando así una enorme mejora en la velocidad de ejecución. Las expresiones regulares se usan ampliamente en tareas comunes de la web, como validaciones y parseo de JSON.

¡A probarlo!

Se puede probar y navegar con SquirrelFish Extreme. Las compilaciones nocturas de WebKit ya incluyen estas mejoras (recuerden que son versiones inestables).

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw