Bonjour
Nous avons de très bonnes présentations aujourd'hui au SFP12. Une était particulièrement intéressante pour tout le groupe alors je vous en envoie les points principaux. La présentation se nommait "Optimizing JS code for V8". Je vous donne tout d'un bloc même si vous connaissez possiblement ce qu'il a dit.
- l'optimisateur se nomme *crankshaft* - seules les fonctions '*hot*' sont optimisées, c.-à-d. des fcts ayant été exécutées un nombre minimum de fois. - il suggère de lancer chrome avec l'option *--user-data-dir=<empty dir>*si on veut avoir une VM clean pour faire des tests. - on peut passer les options suivantes à d8 pour avoir une trace de ce que le compilateur fait de notre code: - *--trace-<flag>*, où flag dans {opt, bailout, inlining, deopt, hydrogen} - *opt*: trace les fcts optimisées - *bailout*: trace les fcts pour lesquelles l'optimisation a été enlevée - *inlining*: trace des fonctions inlinées. Une fct de trop grande taille ("incluant" les commentaires) peut ne pas être inilinée. L'heuristique n'est pas parfaitement au point - *deopt*: trace des fcts pour lesquelles crankshaft enlève les optimisations quand un pattern d'appel change (pour f(a), 'a' a tjrs été un 'int' mais on passe une string). Le processus de deoptimization est coûteux et le code résultant est plus lent. Crankshaft peut optimiser pour une combinaison de types ('a' est int ou str). Crankshaft essaie d'optimiser 5 fois puis démissionne et compile une fonction générique (lente). On peut ajouter le flag *--print-comment* pour avoir plus d'information. - si on compile d8 avec *dissassembler=on*, on peut faire un dump du code asm (scons disassembler=on d8. Utiliser le flag "--print-code"pour avoir le dump. - *hydrogen*: peut être utilisé avec *c1visualizer* pour une représentation graphique du CFG du programme avec capacité d'inspection très cool. Il faut utiliser *--no-sandbox*. Crée le fichier hydrogen.cfg que c1visualizer peut lire. - V8 ne sait pas optimiser le code dans un try/catch - 'arguments' n'est pas optimisé - il vaut toujours mieux utiliser des fonctions monomorphiques (où le type des variables est stable). Vaut mieux dupliquer une fonction et être certain qu'une variable sera tjrs du même type.
J'espère que ce sera utile, et que je n'ai pas fait d'erreur de transcription... Eric