This performs amazingly well on desktop browsers, and on iphone/ipad. On android it's basically unusable, drawing crawls along at about 2 fps.

I'm wondering if there's any efficient way to draw this small bitmap efficiently on android. I've tried a few tricks but nothing really improves. Is the android browser implementation just really lagging behind its ios counterpart?

Some work arounds might be to experiment with using animated div cells for entities rather then directly drawing on canvas. haven't experimented myself but it might perform better.

also try trottling your mouse move, i suspect you are firing way to many mouse move events which could actually be drawing the quandrangles more then once per frame. You should have some type of update function that is called only once per frame, which is managed by some time of timer. Then your update should update the rectangles if a condition is meet that it should have been moved. Rather then trying to redraw based on the event of moving the mouse. Your update function should grab the coordinates of the mouse, and update the positions of the rectangle objects. Then have your draw function which is called right after your update function to actually render on the screen

init { //called once on load
create array of rectangles 50, with default coordinates
}
update { //called once per frame
get coordinates of mouse
iterate though array of rects and update coordinates based on mouse position
}
draw { //called after update
iterate though array of rects and draw them
}
timer { //manages your fps and calls update and draw
update()
draw()
}.scheduleRepeating(1000ms/fpsRate)

now i know that is some ghetto psuedo code but thats how you should be rendering objects. Also do not nest a for in a for...thats very bad as its inefficent you should be doing a modulation instead