Ignition : Google réduit l'empreinte mémoire de son moteur JavaScript V8

Par:
fredericmazue

mar, 30/08/2016 - 15:31

Google vient de publier un très intéressant billet détaillant des progrès réalisés quant à l'empreinte mémoire de son moteur JavaScript V8.

Ce billet explique que V8 et les autres moteurs JavaScript modernes obtiennent leur rapidité à l'exécution d'un compilateur Just-in-Time (JIT) qui compile un script JavaScript en code machine natif juste avant l'exécution. Le code est au départ compilé par un compilateur de base qui génère rapidement un code machine non optimisé. Ce code est ensuite analysé lors de l'exécution et éventuellement recompilé dynamiquement et se voit alors appliquer des optimisations pointues pour gagner en performance.

Avec V8, ce pipeline est complexe car il nécessite de faire des commutations entre le compilateur de base et les deux optimiseurs que sont Crankshaft et Turbofan. Un des problèmes dans tout ça est que ce traitement consomme beaucoup de mémoire, ce qui est peu rentable pour des portions de code exécutés une seule fois.

C'est là que vient l'amélioration Ignition, qui à la place du compilateur de base, compile le code JavaScript en un bytecode concis. Le résultat a une empreinte mémoire de 50% à 25% inférieure à celle du code compilé par le compilateur de base.

Ce bytecode est alors interprété par un interpréteur hautes performances qui montre sur des sites du monde réels des résultats équivalents en terme de rapidité à ce qui était obtenu par l'ancien procédé, assure Google.

L'interpréteur d'Ignition est une machine registre dont chaque bytecode spécifie les entrées/sorties comme des opérandes de registre explicites, ce qui est plus performant qu'une machine à pile avec laquelle le traitement de chaque bytecode consomme des empilages/dépilages.

Ignition viendra avec Chrome 53. Il sera activé sur les appareils Android qui ont une faible capacité mémoire (512 Mo ou moins). Google assure que le gain global de mémoire sera d'environ 5% par onglet ouvert.