I'm not a Pro about the JSF Lifecycle, but i know that things are executed twice.. this is especially annoying when doing e.g. a view lookup for a Repeat Control..
I guess because it's executed on the SET and on the GET.. so when a page is posted, and then when it is rendered again..
One thing to do is doing your own caching, so when you make a view lookup, then store the values in a list.. execute the lookup only, if the list is null.. If you have a dependant list, then clear the cached list, if the value from which the list depends on is changed.
This stuff is much simpler and more transparent if you are using Java (Managed Beans).. I just finished a pretty big XPages Application, without a single line of SSJS (except calls to Managed Beans with parameters.), It resulted in about 40 Java classes (Controller and Object Classes).. If i would have tried that with SSJS, i would be in the mad house right now!!