Aller au contenu principal

27 articles tagués avec « internals »

Voir tous les tags

Accélérer les expressions régulières V8

· 5 minutes de lecture
Jakob Gruber, Ingénieur Logiciel Régulier

Cet article de blog traite de la récente migration des fonctions intégrées des expressions régulières dans V8, passant d'une implémentation en JavaScript autonome à une implémentation qui s'intègre directement dans notre nouvelle architecture de génération de code basée sur TurboFan.

Allumer l'interpréteur Ignition

· 5 minutes de lecture
Ross McIlroy, Jump Starter d'Ignition V8

Les moteurs JavaScript modernes comme V8 obtiennent leur vitesse grâce à la compilation juste-à-temps (JIT) du script en code machine natif immédiatement avant l'exécution. Initialement, le code est compilé par un compilateur basique, qui peut générer rapidement du code machine non optimisé. Le code compilé est analysé pendant l'exécution et éventuellement re-compilé dynamiquement avec un compilateur optimisé plus avancé pour une performance maximale. Dans V8, ce pipeline d'exécution de scripts comporte une variété de cas particuliers et de conditions nécessitant une mécanique complexe pour basculer entre le compilateur de base et deux compilateurs optimisés, Crankshaft et TurboFan.

Extras V8

· 7 minutes de lecture
Domenic Denicola ([@domenic](https://twitter.com/domenic)), Sorcier des flux

V8 implémente une grande partie des objets et fonctions intégrés du langage JavaScript directement en JavaScript. Par exemple, vous pouvez voir notre implémentation des promesses qui est écrite en JavaScript. Ces objets intégrés sont appelés auto hébergés. Ces implémentations sont incluses dans notre instantané de démarrage afin que de nouveaux contextes puissent être rapidement créés sans avoir besoin de configurer et d'initialiser les objets auto hébergés durant l'exécution.

Il y a `Math.random()`, et puis il y a `Math.random()`

· 5 minutes de lecture
Yang Guo ([@hashseed](https://twitter.com/hashseed)), ingénieur logiciel et concepteur de dés

Math.random() retourne une valeur Number avec un signe positif, supérieure ou égale à 0 mais inférieure à 1, choisie de manière aléatoire ou pseudo-aléatoire avec une distribution approximativement uniforme sur cette plage, en utilisant un algorithme ou une stratégie dépendant de l’implémentation. Cette fonction ne prend aucun argument.

Snapshots personnalisés au démarrage

· 3 minutes de lecture
Yang Guo ([@hashseed](https://twitter.com/hashseed)), ingénieur logiciel et fournisseur de préchauffeurs pour moteurs

La spécification JavaScript inclut de nombreuses fonctionnalités intégrées, allant des fonctions mathématiques à un moteur d'expressions régulières complet. Chaque contexte V8 nouvellement créé dispose de ces fonctions disponibles dès le départ. Pour que cela fonctionne, l'objet global (par exemple, l'objet window dans un navigateur) et toutes les fonctionnalités intégrées doivent être configurés et initialisés dans le tas de V8 au moment où le contexte est créé. Cela prend un certain temps si l'on part de zéro.

Mise en cache de code

· 2 minutes de lecture
Yang Guo ([@hashseed](https://twitter.com/hashseed)), Ingénieur logiciel

V8 utilise la compilation juste-à-temps (JIT) pour exécuter le code JavaScript. Cela signifie que, juste avant d'exécuter un script, celui-ci doit être analysé et compilé — ce qui peut engendrer une surcharge considérable. Comme nous l'avons annoncé récemment, la mise en cache de code est une technique qui réduit cette surcharge. Lorsqu'un script est compilé pour la première fois, des données de cache sont produites et stockées. La prochaine fois que V8 doit compiler le même script, même dans une instance différente de V8, il peut utiliser les données de cache pour recréer le résultat de compilation au lieu de compiler depuis le début. En conséquence, le script est exécuté beaucoup plus rapidement.