Firefox 70 sera doté d'un nouvel interpréteur JavaScript

Par:
fredericmazue

lun, 02/09/2019 - 16:40

Les applications web chargent et exécutent toujours plus de code JavaScript, fait remarquer Mozilla dans un billet. Même si Firefox dispose déjà d'un compilateur JIT performant pour améliorer la vitesse d'exécution de JavaScript dans Firefox, Mozilla a estimé pertinent de doter son navigateur d'un nouvel interpréteur JavaScript. Ce nouvel interpréteur viendra avec Firefox 70.

Mozilla détaille les raisons techniques de sa décision dans un très intéressant billet.

En résumé, jusqu'à Firefox 70, le pipeline d'exécution de code JavaScript était celui-ci :

Ce pipeline pose des problèmes que Mozilla décrit ainsi :

  1. La compilation JIT de Baseline est rapide, mais les applications Web modernes telles que Google Docs ou Gmail exécutent tellement de code JavaScript que nous pourrions passer beaucoup de temps dans le compilateur Baseline, en compilant des milliers de fonctions.
  2. Parce que l'interpréteur C ++ est très lent et ne collecte pas d'informations de type, retarder la compilation de Baseline ou le déplacer hors du thread aurait constitué un risque de perte de performance.
  3. Comme vous pouvez le voir dans le diagramme ci-dessus, le code Ion JIT optimisé ne peut que provenir du JIT Baseline. Pour que cela fonctionne, le code JIT de base nécessitait des métadonnées supplémentaires (le décalage du code machine correspondant à chaque instruction de code intermédiaire).
  4. Le JIT de base comportait un code compliqué pour les plans de secours, le support du débogueur et la gestion des exceptions. C'était particulièrement vrai là où ces caractéristiques se rencontrent!

puis décrit la solution :

Nous avions besoin d'informations de type provenant de JIT Baseline pour activer les niveaux les plus optimisés, et nous voulions utiliser la compilation JIT pour la vitesse d'exécution. Cependant, le Web moderne a des bases de code si volumineuses que même le compilateur relativement rapide JIT Compiler passe beaucoup de temps à compiler. Pour remédier à cela, Firefox 70 ajoute au pipeline un nouveau niveau appelé interpréteur de base:

L'interpréteur de base se situe entre l'interpréteur C ++ et le JIT de base et contient des éléments des deux. Il exécute toutes les instructions bytecode avec une boucle interpréteur fixe (comme l'interpréteur C ++). En outre, il utilise les caches en ligne pour améliorer les performances et collecter des informations de type (comme le JIT de base).

Ce nouvel interpréteur a été construit une réutilisant de manière agréable la plupart du code Baseline JIT Compiler indique encore Mozilla, qui annonce une amélioration des performances de 2 à 8%, avec une amélioration du même ordre pour le temps de chargement, le tout avec une petite réduction de l'empreinte mémoire.