JägerMonkey
# JägerMonkey

JägerMonkey est un compilateur à la volée pour le moteur d'exécution JavaScript SpiderMonkey. Il a été créé par la fondation Mozilla pour le moteur de rendu Gecko.

Il a été créé afin d'améliorer les performances d'exécution JavaScript du moteur SpiderMonkey augmenté de TraceMonkey. Contrairement à TraceMonkey qui est un compilateur à la volée basé sur les arbres de traces, JägerMonkey est un compilateur à la volée classique basé sur l'optimisation de l'exécution d'une méthode.

Introduit avec la version 4 de Firefox, ses performances augmenteront sensiblement dans la version 9 par le jeu de l'inférence de types.

## Principe de fonctionnement

TraceMonkey étant extrêmement rapide lorsque le code Javascript reste sur les traces, le but est de pouvoir exécuter le code Javascript hors des traces plus rapidement que ce que l'interpréteur SpiderMonkey ne peut le faire. C'est là que JägerMonkey intervient en compilant à la volée des méthodes entières qui vont pouvoir bénéficier d'un code d'exécution générique (capable de prendre en compte tous les cas, comme SpiderMonkey) mais compilé nativement (donc plus rapide). De plus, un compilateur de méthodes ne compile le code d'une méthode qu'une seule fois, contrairement au compilateur de traces qui ne peut compiler qu'une seule trace à la fois.

JägerMonkey utilise le générateur de code natif Nitro (de WebKit), au lieu d'utiliser nanojit (celui de TraceMonkey) car le premier est très rapide alors que le deuxième réalise des optimisations qui ralentissent la génération de code.

Dans le futur, les développeurs envisagent de plus intégrer les deux compilateurs JIT: le compilateur de méthodes pourra identifier les boucles et invoquera le compilateur de traces et inversement, si le compilateur de traces juge qu'une méthode est trop compliquée pour qu'il puisse la compiler, il pourra invoquer le compilateur de méthodes.

## Résultats

L'équipe de Mozilla a mis en place une page web pour observer les résultats de ce travail d'optimisation et pouvoir le comparer aux autres moteurs Javascript. Cette page montre les vitesses respectives de Mozilla avec TraceMonkey (moz tracing JIT), JägerMonkey (moz method JIT), TraceMonkey + JägerMonkey (moz method+tracing), Google Chrome V8 (google v8), WebKit (apple nitro), et SpiderMonkey tout seul (moz w/o JIT).

