This isn't going to be a real post, but in case anyone else is having issues with performance on canvas-backed views, I learned something fairly important this past week. Canvas, while it does perform fairly well when drawing lots of objects, is absolutely horrendous at drawing on a large space. In Mockingbird, this meant that people with pages that were bigger than about 2000x2000 were suffering from choppiness and slowdowns, and as soon as I just removed drawing on a canvas element this big, things sped up tremendously. This is a blog post that has some numbers and graphs.
For those that drink the Cappuccino, Cappuccino will call lockFocus on a view when the view needs display, even if the view has nothing in drawRect. This means that if you have a giant CPView, even if you don't implement drawRect on it, a giant canvas element gets created in lockFocus. It's not a huge performance hit, but getting rid of the lockFocus call did speed things up an a lower powered Macbook running Safari. I made the following view subclass to do this:
Really simple - by default, a BigView will not draw anything. But you can still set the isDrawable flag to make it call your drawRect method.
EDIT: Just talked with the guys at 280 North and they explained to me that Cappuccino is, in fact, smart about not calling lockFocus unnecessarily. The reason for the performance differences on the Macbook Pro vs the Macbook was that the code on the Macbook Pro did not have a drawRect method at all, whereas the code on the Macbook had an empty drawRect method on the view. Cappuccino, apparently, figures out if your CPView subclass has an overridden drawRect method before calling lockFocus and all the other drawing code. So, the default CPView already optimizes for this (just don't have an empty drawRect method in your CPView subclass).
Hope this helps anyone else running into performance problems with the Canvas tag.