Compartir en Facebook
Compartir en Twitter

La preview de Windows 10 trae mejoras clave para Chakra, el motor de JavaScript de Internet Explorer desde la versión 9, esto significa que se potenciará su uso en las aplicaciones basadas en web en todo dispositivo viviente con un Windows.

Como todas las versiones de Chakra existentes en Internet Explorer 9, Internet Explorer 10 e Internet Explorer 11, esta versión es un paso muy importante para ofrecer un motor de JavaScript altamente interoperable, seguro, confiable y que proporcione un gran rendimiento. Chakra ahora posee una tubería de ejecución altamente racionalizada para ofrecer un arranque más rápido, incorpora nuevas y aumentadas optimizaciones en el compilador Chakra’s Just-in-Time (JIT) para mejorar el desempeño del script en ejecución, junto con un mejorado recolector de basura, disminuyendo el tiempo de respuesta.

Al ya existente compilador Full JIT, se integra un nuevo nivel de compilación con otro compilador, Simple JIT, el cual entra en juego entre el cambio sobre una ejecución de una función en el intérprete para ejecutar el altamente optimizado código JIT, cuando el código compilado esté disponible. Como su nombre implica, evita el código generado con complejas optimizaciones, el cual es dependiente de la recolección de datos del intérprete. Disponer de Simple JIT permite lograr una conmutación más rápida de bytecode a código simple “JITeado, que a su vez ayuda a Chakra a iniciar más rápidamente las aplicaciones y sitios. En definitiva, es una versión menos optimizada del compilador completo Full JIT, diseñada para aumentar la rapidez de ejecución de códigos simples, funcionando como un subproceso de fondo concurrente JIT, que comparten ambos compiladores.

Por otro lado, hoy en día, las aplicaciones web se utilizan en una gran variedad de dispositivos (smartphone, Xbox, PC, 2-in-1, tablets, etc.). Estas configuraciones restringen la disponibilidad de recursos de hardware, con lo que las aplicaciones que se ejecutan sobre grandes sistemas a menudo no aprovechan totalmente el poder del hardware subyacente. Desde su creación en Internet Explorer 9, Chakra ha utilizado un subproceso paralelo de fondo para la compilación JIT, pero, en esta nueva versión Chakra es más consciente del hardware que tiene debajo. Siempre que Chakra determina que el hardware está siendo infrautilizado, podrá generar múltiples subprocesos concurrentes en segundo plano para la compilación JIT. Chakra administra la carga de código entre el Simple JIT y el Full JIT, dividiéndola y encolándola para su compilación a través de múltiples hilos JIT. Esto ayuda a reducir la latencia global de la compilación JIT, proporcionando un 30% más de rapidez en el compilador TypeScript.

También destacamos, entre las novedades, la ejecución rápida de JavaScript gracias a las optimizaciones realizadas en el propio compilador JIT. La representación interna de una propiedad de un objeto es conocida como tipo (Type). Basado en el número de propiedades y layout de un objeto, Chakra crea, bien un tipo rápido (Fast Type) o un tipo lento (Slower Property Bag Type) para cada objeto encontrado durante la ejecución del script. A medida que se agregan propiedades, su layout cambia y un nuevo tipo es creado para representar el layout actualizado. La mayoría de los objetos que tengan la misma propiedad de layout comparten el mismo tipo rápido interno. Para mejorar el rendimiento de las búsquedas repetidas para un tipo rápido interno en la llamada dada por un sitio, Chakra crea cachés para el tipo rápido, asociando el nombre de la propiedad con su ubicación en el layout. Esto permite a Chakra acceder directamente a su ubicación, cuando al objeto se le llama repetidamente en el sitio web. Durante la ejecución de código, si Chakra encuentra un objeto de tipo diferente se almacena una pérdida en la caché, ya que Chakra debe volver a encontrar la ubicación y nombre de la propiedad para realizar lo descrito anteriormente. En Internet Explorer 11, Chakra ya incorporó varias mejoras, como la capacidad de crear cachés polimórficas para un acceso a la propiedad, que almacenan información de más de un tipo rápido, de tal manera que si varios objetos son llamados repentinamente y de diferente tipo el rendimiento no se ve sumamente afectado. Aun así, las cachés polimórficas son algo más lentas que una monomórfica (un sólo tipo). Por este motivo, en Windows 10 Technical Preview, Chakra introduce una nueva optimización llamada especialización del tipo equivalente del objeto (Equivalent Object Type Specialization), la cual permite al compilador JIT eliminar comprobaciones redundantes de tipos en la caché cuando múltiples propiedades de diferentes tipos son accedidas en el mismo objeto.

Otras de las optimizaciones es function inlining. Esto ocurre cuando se inserta el cuerpo de una función llamada, o inline, en el cuerpo de la función superior que la llama, ahorrando así la sobrecarga de invocación de la función y la de regreso. Para lenguajes dinámicos como JavaScript, es necesario verificar que se coloca inline la función correcta preservando los parámetros y permitiendo a la pila caminar en una caja de código utilizando .caller o .argument. En Windows 10 Technical Preview, Chakra ha eliminado la sobrecarga de procesos para la mayoría de los casos mediante el uso de datos estáticos para evitar la sobrecarga dinámica. Esto proporciona hasta un 10% de aumento de rendimiento en ciertos casos y hace que el código generado por el optimizador de Chakra para el compilador JIT sea idéntico al código inline realizado de forma manual por el programador en términos de rendimiento en su ejecución.

Por otra parte, Chakra también almacena, a partir de Internet Explorer 11, heurísticas y respaldo para tratar arrays numéricos de JavaScript como arrays con tipo de dato. Esto permitió a los arrays de JavaScript, ya sea con todos los números enteros o con todos los coma flotante, ser detectados automáticamente por Chakra y codificados internamente en arrays con tipo. Este cambio permite optimizar la carga de arrays, evitando el etiquetado de números enteros y el empaquetado de valores en coma flotante para arrays de su tipo. En Windows 10 Technical Preview, Chakra mejora aún más el rendimiento de este tipo de estructuras de datos añadiendo optimizaciones para evitar comprobaciones, aumentando la velocidad de carga interna de arrays en memoria y la carga de su longitud. Aparte de su uso en webs reales, muchas librerías de JavaScript que realizan bucles sobre arrays como Lo-Dash o Underscore se benefician de estas optimizaciones. En patrones específicos probados, Chakra ahora realiza un 40% más rápido este tipo de trabajos con arrays.

Por último, y no menos importante en un lenguaje de alto nivel, las mejoras en el recolector de basura continúan empujando el trabajo de los subprocesos dedicados a ello. Chakra tiene un recolector de basura que soporta concurrencia y colecciones parciales. En Internet Explorer 11, cuando un recolector concurrente es iniciado,  el recolector de fondo de Chakra podía realizar una marca inicial en los objetos y reescanear los objetos que hubieran sido modificados por el hilo principal de ejecución mientras corría el recolector de fondo de Chakra, y realizar una segunda marca en los objetos reescaneados. Una vez que la segunda marca se realizase, el hilo principal se detenía y un reescaneo final con marcaje era realizado, seguido de un barrido realizado principalmente por el hilo del recolector de fondo para localizar objetos inaccesibles y añadirlos de nuevo a la piscina de la asignación. La marca final se llevaba a cabo sólo en el hilo principal pudiendo causar retrasos si hubiesen un montón de objetos para marcar. Estos retrasos contribuían a la pérdida de fotogramas de animación en ciertos casos, dando lugar a animaciones poco fluidas. En Windows 10 Technical Preview, esta marca final ahora se divide entre el hilo principal y el hilo dedicado al recolector de basura para reducir las pausas del hilo principal. Con este cambio, el tiempo que el recolector de basura gasta en la marca final de objetos en el hilo principal se ha reducido hasta en un 48%.

Microsoft pretende con este avance mejorar la experiencia de navegación web por sitios multimedia y dinámicos, así como las apps que se basen en esta tecnología, que hoy en día tiene mucho potencial.

8 Comentarios

Comments are closed.