Normalement vous n'avez pas besoin de la connexion pendant toute la durée d'exécution du script.
Faire des "echo" & cie c'est une opération très longue (il faut envoyer les entêtes HTTP, gérer le buffer, et enfin envoyer les premières données). Donc une bonne pratique est :
- Faire ses traitements (dont requêtes)
- Fermer toutes les connexions
- Envoyer les entêtes HTTP
- Envoyer les données
Le temps d'envoi des entêtes et des données au client représente *au moins* la moitié du temps d'exécution d'un script. Imaginons que vous ayez un serveur MySQL configuré pour supporter 4 connexions simultanées, et que votre script ait une durée d'exécution de 1s.
Avec la méthode "je m'en fous je fais tout dans n'importe quel sens et je vous dis crotte", ça donne une durée de connexion à MySQL de 1s pour le script :
- 4 visites sur le script en 1s = OK
- 5e visite sur le script en 1s = échec critique (too many connexions, connection à SQL impossible, boum badaboum).
Avec la méthode "je ferme proprement ma connexion quand j'ai fini de faire mes requêtes", ça donne une durée de connexion à MySQL de 0.5s, et donc on double le nombre de visites simultanées :
- 8 visites sur le script en 1s = OK
- 9e visite = échec critique, mais de toute façon comme Apache est par défaut configuré pour 6 ou 8 connexions simultanées, il faudra optimiser parce qu'Apache risque de dire non avant MySQL
C'est aussi pour ça qu'on conseille la méthode MVC : on n'envoie aucune entête ni aucune sortie au client tant qu'on n'a pas fini *tous* les traitements. Sans cette pratique, effectivement il est idiot de faire un mysq_close() vu qu'on fait des requêtes dans à peu près tous les fichiers dans un joyeux mélange.
Faire des "echo" & cie c'est une opération très longue (il faut envoyer les entêtes HTTP, gérer le buffer, et enfin envoyer les premières données). Donc une bonne pratique est :
- Faire ses traitements (dont requêtes)
- Fermer toutes les connexions
- Envoyer les entêtes HTTP
- Envoyer les données
Le temps d'envoi des entêtes et des données au client représente *au moins* la moitié du temps d'exécution d'un script. Imaginons que vous ayez un serveur MySQL configuré pour supporter 4 connexions simultanées, et que votre script ait une durée d'exécution de 1s.
Avec la méthode "je m'en fous je fais tout dans n'importe quel sens et je vous dis crotte", ça donne une durée de connexion à MySQL de 1s pour le script :
- 4 visites sur le script en 1s = OK
- 5e visite sur le script en 1s = échec critique (too many connexions, connection à SQL impossible, boum badaboum).
Avec la méthode "je ferme proprement ma connexion quand j'ai fini de faire mes requêtes", ça donne une durée de connexion à MySQL de 0.5s, et donc on double le nombre de visites simultanées :
- 8 visites sur le script en 1s = OK
- 9e visite = échec critique, mais de toute façon comme Apache est par défaut configuré pour 6 ou 8 connexions simultanées, il faudra optimiser parce qu'Apache risque de dire non avant MySQL
C'est aussi pour ça qu'on conseille la méthode MVC : on n'envoie aucune entête ni aucune sortie au client tant qu'on n'a pas fini *tous* les traitements. Sans cette pratique, effectivement il est idiot de faire un mysq_close() vu qu'on fait des requêtes dans à peu près tous les fichiers dans un joyeux mélange.
Ressources [PHP][MySQL][prototype.js]