This is one of those things you have to laugh or cry about.
The primary reason that I have found that our consolidated AJAX page is slow, and that no amount of HTTP traffic optimization is going to fix, is that two of our composited components had implemented getters by way of a database query.
This is absolute bad practice – JSF does not guarantee that your getters will be called just once, so even in a Web 1.0 application you may be making redundant database queries.
In an AJAX application this problem is exacerbated – doubtless none of those queries are necessary on the AJAX request.
In our application each of those queries ate up about 100ms, multiplied about 3 times each because they were embedded in getters. Obviously this soon becomes a noticeable delay ruins the feel of the application.
Simply caching the query in the bean removes this problem, but in a Seam component you have several more options to refine this approach.
Since our beans were EVENT scoped, we specifically outjected PAGE scoped variables to host the cache.