JägerMonkey

JägerMonkey è un compilatore al volo per il motore di runtime JavaScript SpiderMonkey . È stato creato dalla Mozilla Foundation per il motore di rendering Gecko .

È stato creato per migliorare le prestazioni di runtime JavaScript del motore SpiderMonkey potenziato da TraceMonkey . A differenza di TraceMonkey, che è un albero di traccia basato sul compilatore al volo , JägerMonkey è un classico compilatore al volo basato sull'ottimizzazione dell'esecuzione di un metodo .

Introdotto con la versione 4 di Firefox , le sue prestazioni aumenteranno in modo significativo nella versione 9 attraverso il gioco di inferenza del tipo .

Principio di funzionamento

Essendo TraceMonkey estremamente veloce quando il codice JavaScript rimane nelle tracce, l'obiettivo è essere in grado di eseguire il codice JavaScript fuori dalle tracce più velocemente di quanto possa fare l'interprete di SpiderMonkey. È qui che entra in gioco JägerMonkey compilando al volo interi metodi che potranno beneficiare di un codice di esecuzione generico (in grado di tenere conto di tutti i casi, come SpiderMonkey) ma compilato in modo nativo (quindi più veloce). Inoltre, un compilatore di metodi compila il codice di un metodo solo una volta, a differenza del compilatore di tracce che può compilare solo una traccia alla volta.

JägerMonkey utilizza il generatore di codice nativo Nitro (da WebKit ), invece di utilizzare nanojit (quello di TraceMonkey ) perché il primo è molto veloce mentre il secondo esegue ottimizzazioni che rallentano la generazione del codice.

In futuro, gli sviluppatori prevedono di integrare i due compilatori JIT in aggiunta: il compilatore del metodo sarà in grado di identificare i loop e richiamerà il compilatore di traccia e viceversa, se il compilatore di traccia giudica che un metodo è troppo complicato per farlo essere in grado di usarlo, compilarlo, può invocare il compilatore del metodo.

Risultati

Il team di Mozilla ha creato una pagina web per osservare i risultati di questo lavoro di ottimizzazione e per poterlo confrontare con altri motori JavaScript. Questa pagina mostra le rispettive velocità di Mozilla con TraceMonkey ( moz tracing JIT ), JägerMonkey ( moz method JIT ), TraceMonkey + JägerMonkey (moz method + tracing), Google Chrome V8 ( google v8 ), WebKit ( apple nitro ) e SpiderMonkey tutto solo ( moz senza JIT ).

Note e riferimenti

  1. (en) JaegerMonkey - Veloce JavaScript, sempre! ,26 febbraio 2010
  2. ( entra ) Avvio di JägerMonkey David Mandelin the26 febbraio 2010
  3. (in) Siamo già veloci?