Get object, which is more optimized?

More optimized to findobject(s) by tag, or to script so that the object(s) are set in hierarchy? If you need to find/assign components or varables of other scripts, would your answer change?

I do believe that assigning the object to a public GameObject var is more optimized, as you are setting the var before the game start, but finding objects is not a big deal, unless you keep doing it in the Update().

The best practice is to aways find things in the Start() and them use them trough your code, if you are going to use lots of GetComponents first declare a var of the component type as public and set it in the Start() so you will never worry about getting the component again.