The key...if you're into functional GPO's (vs. monolithic) is having an effective and meaningful OU structure. Otherwise, half of your time will be creating security filters or specific targeting which can get very confusing very quickly.
The performance impact of processing GPO's in general is negligible, but it does depend on what that GPO is doing (i.e. deploying software in general or printers over slow links? Have a seat and grab a cup of coffee). I would be more concerned if you have slow links at your sites - if this is the case, you need to ensure that you have Sites and Services configured appropriately and a RODC at your remote site to facilitate speedy logins.
Being aware of GPO enforcement (which you should try to avoid) and LSDO ordering will help you tons.
There's really no right or wrong way to deploy GPO's as it is more about what you're doing with them, how they are deploying, and what you're deploying them to.
Personally, my preference is to break my GPO's out to functional objects - i.e. this one is for security, this one is for desktop preferences, this one is for drive mappings, etc.