Another difference in performance is, as is already mentioned, the GC. I suspect (I've not checked) that most browsers use either a reference counting GC (because all memory the GC allocated for a page can be freed when the page is left, it's actually one of the best places to use a reference counting GC), or a conservative scanning GC (such as Boehm). The latter can be considerably slower than the former if it's not implemented right. (Boehm is an example of a right implementation) Flash on the other hand uses a precise GC (much easier to do in a strongly typed system). Because Flash uses a precise GC, it doesn't have the runtime overhead of reference counting. (which isn't huge, but is still there) A good example of a precise GC is Mono's SGen, which also compacts the heaps.
All-in all, it comes down to the fact that a dynamic language will always be slower than a statically typed one if it has to be compiled in a timely manner so as to not make the user complain about it's slowness.