Il vaut mieux connecter "réellement" lorsque l'on a vraiment besoin de la base de données. Par exemple si 50% des rendus de pages ne nécessitent pas de bdd, on économise 50% de connexion à la base.
Dans tous les cas, il vaut mieux ne faire la connexion qu'à la demande.
Par-contre, c'est un poil plus compliqué : il faut le faire bien, et ne connecter qu'une seule fois dans l’exécution du script. En programmation non-objet, je conseillerais de de manipuler carrément la connexion en global plutôt que de la trimbaler en argument de fonction. Mais le plus propre est de programmer en objet, et de réunir les manipulations de bdd au sein d'un même objet qui contient une dépendance à la bdd géré par un objet correctement écrit pour faire ce que l'on veut avec.
Et sinon, sauf cas spécifique il n'est pas nécessaire de fermer les connexions à la bdd, php s'en charge lui-même si la connexion n'est pas persistante.