Because gaming. Pretty much any graphics operation you can do in Flash can be done with Javascript and Canvas. But it requires writing several times as much code, runs about 20% of the speed and consumes most of the CPU to do simple tasks.
For example, lets say you want to create a little green radar HUD map for where enemies are on a battlefield in front of you. In AS3 you can make each enemy dot be a sprite, and move them individually when necessary. You can mask them when they reach the edge of the HUD, fade them out when they disappear. When you turn left or right, they all turn together. Because of how Flash's graphics engine works, only the graphical areas that are changed in each frame are actually redrawn; this is all handled at a very low level and the speed is close to native; it can also be coded to take advantage of a GPU.
To accomplish the same thing in Javascript and Canvas, you have to write an engine that tracks where each of those things is in global space. To draw little rectangles at different rotations within the same canvas, you actually have to rotate the canvas, draw the rectangle, then unrotate the canvas. Once you've got this engine written, you still have to redraw the entire canvas with your engine deciding how to draw each pixel, square or circle, one by one, with every single frame. To get around that, you write another engine that determines which areas are changing and only redraws those. But then you have to decide what to do when overlapping objects are in front of or behind that area, so now you've written a scene graph, z-order and a traverser, and possibly parent-child relationships, from scratch. Fine, but you realize that the traverser, running as it is in untyped javascript without the benefit of typed iterators like vectors, can't handle more than a dozen objects before it's hogging up even more of the CPU than if you just redrew the whole stupid canvas every single frame.
So, all this behavior is necessary for any game. Good coders are struggling to make these things playable in HTML5 to keep the mobile market happy, but to do that you have to cut a lot of corners. The game quality's obviously lower, and the games are slower than they would be in AS3. It's just unavoidable. People who don't know how computers work then complain that Flash is so slow, etc. because of the perception of sloppily coded banners and stuff. But when the same exact things are written in Javascript and Canvas they are much, much slower.
For example, lets say you want to create a little green radar HUD map for where enemies are on a battlefield in front of you. In AS3 you can make each enemy dot be a sprite, and move them individually when necessary. You can mask them when they reach the edge of the HUD, fade them out when they disappear. When you turn left or right, they all turn together. Because of how Flash's graphics engine works, only the graphical areas that are changed in each frame are actually redrawn; this is all handled at a very low level and the speed is close to native; it can also be coded to take advantage of a GPU.
To accomplish the same thing in Javascript and Canvas, you have to write an engine that tracks where each of those things is in global space. To draw little rectangles at different rotations within the same canvas, you actually have to rotate the canvas, draw the rectangle, then unrotate the canvas. Once you've got this engine written, you still have to redraw the entire canvas with your engine deciding how to draw each pixel, square or circle, one by one, with every single frame. To get around that, you write another engine that determines which areas are changing and only redraws those. But then you have to decide what to do when overlapping objects are in front of or behind that area, so now you've written a scene graph, z-order and a traverser, and possibly parent-child relationships, from scratch. Fine, but you realize that the traverser, running as it is in untyped javascript without the benefit of typed iterators like vectors, can't handle more than a dozen objects before it's hogging up even more of the CPU than if you just redrew the whole stupid canvas every single frame.
So, all this behavior is necessary for any game. Good coders are struggling to make these things playable in HTML5 to keep the mobile market happy, but to do that you have to cut a lot of corners. The game quality's obviously lower, and the games are slower than they would be in AS3. It's just unavoidable. People who don't know how computers work then complain that Flash is so slow, etc. because of the perception of sloppily coded banners and stuff. But when the same exact things are written in Javascript and Canvas they are much, much slower.