Une chose intéressante que je suis surpris que personne n'a encore mentionné est la différence dans les types de compilation JIT, car Flash est toujours compilé JIT, et, dans la plupart des navigateurs modernes, JavaScript aussi, mais Flash est un langage fortement typé, ce qui signifie il y a tout un éventail d'optimisations qu'il peut faire (comme émettre directement un appel à une méthode (quelque chose que JavaScript ne peut pas faire)), que JavaScript ne peut pas faire car il est typé dynamiquement. Vous pouvez remplacer la définition entière d'une fonction en JavaScript à tout moment que vous voulez, et cette nouvelle définition doit être appelée. (il est toujours possible pour JavaScript de faire un appel indirect qui ne serait pas beaucoup plus cher cependant) L'accès aux champs sur un champ est en fait un meilleur exemple que l'appel de méthode, car JavaScript ne peut même pas le faire indirectement,
Comme nous l'avons déjà mentionné, une autre différence de performances est le GC. Je soupçonne (je n'ai pas vérifié) que la plupart des navigateurs utilisent soit un GC de comptage de référence (car toute la mémoire allouée au GC pour une page peut être libérée lorsque la page est laissée, c'est en fait l'un des meilleurs endroits pour utiliser un GC de comptage de référence ), ou un GC à balayage conservateur (comme Boehm). Ce dernier peut être considérablement plus lent que le premier s'il n'est pas correctement mis en œuvre. (Boehm est un exemple d'une bonne implémentation) Flash d'autre part utilise un GC précis (beaucoup plus facile à faire dans un système fortement typé). Parce que Flash utilise un GC précis, il n'a pas la surcharge d'exécution du comptage de référence. (qui n'est pas énorme, mais qui est toujours là) Un bon exemple de GC précis est le SGen de Mono, qui compacte également les tas.
Ensuite vient le fait que JavaScript n'a pas été conçu avec l'animation à l'esprit. (comme cela a également été mentionné) Pour autant que je sache, aucun navigateur n'émettra d'instructions de style SSE pour les boucles d'animation, où les fonctions de rendu principales de Flash ont probablement été optimisées à la main pour des performances optimales. (à certains endroits, écrit en assemblage brut)
Dans l'ensemble, cela revient au fait qu'un langage dynamique sera toujours plus lent qu'un langage statiquement typé s'il doit être compilé en temps opportun afin de ne pas faire se plaindre l'utilisateur de sa lenteur.