Eine interessante Sache, von der ich überrascht bin, dass sie noch niemand erwähnt hat, ist der Unterschied in den Arten der JIT-Kompilierung, da Flash immer noch JIT-kompiliert ist, und in den meisten modernen Browsern auch JavaScript, jedoch ist Flash eine stark typisierte Sprache, was bedeutet Es gibt eine ganze Reihe von Optimierungen, die durchgeführt werden können (z. B. das direkte Ausgeben eines Aufrufs einer Methode (was JavaScript nicht kann)), die JavaScript nicht ausführen kann, weil es dynamisch typisiert ist. Sie können die gesamte Definition einer Funktion in JavaScript jederzeit ersetzen, und diese neue Definition muss aufgerufen werden. (JavaScript kann immer noch einen indirekten Aufruf ausführen, der allerdings nicht viel teurer wäre.) Der Feldzugriff auf ein Feld ist tatsächlich ein besseres Beispiel als der Methodenaufruf, da JavaScript dies nicht einmal indirekt ausführen kann.
Ein weiterer Leistungsunterschied ist, wie bereits erwähnt, der GC. Ich vermute (ich habe nicht überprüft), dass die meisten Browser entweder einen Referenzzähl-GC verwenden (da der gesamte Speicher, den der GC für eine Seite zugewiesen hat, freigegeben werden kann, wenn die Seite verlassen wird, ist dies tatsächlich einer der besten Orte, um einen Referenzzähl-GC zu verwenden ) oder ein konservativer Scan-GC (wie Boehm). Letzteres kann erheblich langsamer sein als Ersteres, wenn es nicht richtig implementiert wird. (Boehm ist ein Beispiel für eine richtige Implementierung) Flash verwendet dagegen einen präzisen GC (viel einfacher in einem stark typisierten System). Da Flash einen präzisen GC verwendet, hat es nicht den Laufzeitaufwand für die Referenzzählung. (was nicht riesig ist, aber immer noch da ist) Ein gutes Beispiel für einen präzisen GC ist Monos SGen, der auch die Haufen verdichtet.
Dann kommt die Tatsache, dass JavaScript nicht für Animationen entwickelt wurde. (wie auch erwähnt) Soweit ich weiß, gibt kein Browser Anweisungen im SSE-Stil für die Animationsschleifen aus, wobei die Kern-Rendering-Funktionen in Flash wahrscheinlich von Hand für maximale Leistung optimiert wurden. (an einigen Stellen wird in Rohmontage geschrieben)
Alles in allem kommt es darauf an, dass eine dynamische Sprache immer langsamer ist als eine statisch typisierte, wenn sie rechtzeitig kompiliert werden muss, damit sich der Benutzer nicht über ihre Langsamkeit beschwert.