The particular case I am looking at is with a client bundle used in multiple UiBinders. The client bundle is included in a ui:with tag. Is a new client bundle being generate for each one, and if so what are the performance implications?
I can cache the ClientBundle with the @UiField(provided=true) annotation, is this a good idea?
Any caching that needs to be done is done internally - there are static members generated with the ClientBundle implementation itself to ensure that after something is done, it doesnt need to be done again. This applies to ImageResource usage as well as CssResource.ensureInjected.
Use them as makes sense for any object - the compiler will do its best to make the cleanest code possible. Where there is no chance for dynamic dispatch (multiple implementations or subclasses) it will rebuild methods into static methods, if no need for a this
reference, it will compile out the references to 'this' entirely.
In short, write readable code, and the compiler will worry about it. If you are concerned, use the excellent CPU and memory profiling tools in Chrome to compare strategies, but I'd be amazed if you saw any difference at all.