Temps de réponse et temps d'affichage [Résolu]

cs_Tartuffe 39 Messages postés jeudi 27 mai 2004Date d'inscription 18 février 2008 Dernière intervention - 28 mars 2006 à 12:17 - Dernière réponse : cs_Anthomicro 9440 Messages postés mardi 9 octobre 2001Date d'inscription 13 avril 2007 Dernière intervention
- 28 mars 2006 à 19:37
Salut tous..



Une question pour un pro sur une problématique de temps de réponse + temps d'accès en PHP + Mysql...



Voici le problème :

- J'ai 2 tables : une avec des ID (t1) et une avec des LIBELLE (t2)

- J'ai 2 fonctions : une qui traite l'accès aux ID (f1), l'autre l'accès aux LIBELLE (f2)

- J'ai 2 pages php : une qui contient les fonctions (p1) et une qui contient mes traitements (p2)

- l'ouverture de la connexion à la BdD est faite au préalable, la fermeture à la fin des traitements



Question : laquelle de ces 2 solutions est la plus rapide à l'affichage (je ne parle pas de pertinence ! )

1/

Dans P2 je fais....
i. appele F1

ii. traitement de F1 dans une boucle ; appelle F2 + affichage des résultats



2/

Dans P2 je fais...

i. appele F1

Dans F1 de P1 je fais...

ii. appele F2

Dans P2 je fais...

iii. traitement de F1 dans une boucle ; affichage des résultats





Bonne question, n'est-ce pas [: - )


PekLandais
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 28 mars 2006 à 13:07
3
Merci
- une boucle de fonctions je pense
- une requête OPTIMISEE, donc à voir au niveau des jointures
- ça dépend du traitement...

Merci malalam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de malalam
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 28 mars 2006 à 12:30
0
Merci
Hello,

pourquoi tu ne benches pas les 2 solutions...??
Ceci dit je n'ai pas tout compris : on ne sait pas quels sont tes traitements, ni rien.
Le plus rapide, c'est aussi fonction du code, et de la structure des tables.

Bref comme ça, à vue de nez, sans plus d'infos, la solution 1 sera probablement la plus rapide.

Mais vraiment, il y a trop peu d'infos.
Commenter la réponse de malalam
cs_Tartuffe 39 Messages postés jeudi 27 mai 2004Date d'inscription 18 février 2008 Dernière intervention - 28 mars 2006 à 12:47
0
Merci
... en recentrant la question : il vaut mieux faire une chaine de fonctions ou une boucle de fonction ?

Mais cela a t'il un impact significatif en terme de temps de réponse ?



Soit dans le cas ci-dessus :

- F1 avec un résultat partiel, puis appel unitaire à F2 à chaque résultat de F1

vs

- F1 qui fait un appel unitaire à F2 et renvoie un résultat complet, puis traitement de F1




Maintenant, en élargissant la question, car c'était là le fond de ma pensée :

Vaut-il mieux faire une requête complète (avec jointures) qui retourne le résultat final, ou un enchainement de requête simple avec PHP qui boucle pour reconstituer le résultat final.



Le rapide en terme de temps de réponse, c'est PHP ou MySQL ?

"En théorie", qui des 2 doit travailler le plus afin d'améliorer le temps de réponse ?






PekLandais
Commenter la réponse de cs_Tartuffe
huberdine 158 Messages postés samedi 8 février 2003Date d'inscription 17 juin 2010 Dernière intervention - 28 mars 2006 à 14:34
0
Merci
Ce qui est certain, c'est qu'un appele à la base de données (MySql) est couteux, en temps, et en ressources.
L'idéal, c'est d'en faire le maximum en php et d'optimier au maximum tes requêtes MySql avec des jointures afin de n'aller chercher dans la BDD que ce dont tu a besoin.

D'un autre côté, à moins d'avoir des traitements longs (sur plusieurs centaintes d'enregistrements), le temps de traitement Php/MySql sera beaucoup plus court que l'acheminement des données du serveur au navigateur du client.

-*- switch -*-
Commenter la réponse de huberdine
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 28 mars 2006 à 14:45
0
Merci
Je ne suis pas certain que, par exemple, créer un libelle particulier à partir de plusieurs champs, avec une expression régulière, un concat ou autre, soit plus long à effectuer directement dans la requête, plutôt que d'aller chercher les champs normalement, et de traiter l'info ensuite via php.
J'ai même de sérieux doutes ;-)
Maintenant, tout est question d'optimisation et du genre de traitement, comme je le disais : ça dépend du traitement.
Convertir une date, par exemple, autant le faire niveau SQL directement. COALESCE est sans doute (je n'ai jamais testé hein mais...j'ai dans l'idée que...) plus rapide que de récupérer le nom du champ et de faire le remplacement voulu en php.
Personnellement, sur un projet actuel, j'ai un traitement de moins de 2 secondes sur 2700 requêtes SELECT avec traitements divers (coalesce justement notamment), sur une base relativement légère il est vrai (les tables ne dépassent pas les 2300 enregistrements). Je suis passé de 7 secondes à moins de 2 en descendant simplement certaines infos, afin de limiter les jointures.
Bref...tout est à tester...et à optimiser. Pour arriver à ce résultat, j'ai benché à tout va!
Commenter la réponse de malalam
huberdine 158 Messages postés samedi 8 février 2003Date d'inscription 17 juin 2010 Dernière intervention - 28 mars 2006 à 15:10
0
Merci
J'abonde évidemment dans ce sens là : il vaut mieux une requête SQL un peu complexe
que 1 requête SQL, un traitement puis une seconde requête SQL.
C'est pour celà qu'il faut en faire le maximum en php dans le but de limiter tes requêtes.
Ton approche du code sera différente si tu fais des requêtes à tout bout de champ ou si au contraire tu essaye de faire le moins de requêtes possibles.

-*- switch -*-
Commenter la réponse de huberdine
cs_Anthomicro 9440 Messages postés mardi 9 octobre 2001Date d'inscription 13 avril 2007 Dernière intervention - 28 mars 2006 à 19:37
0
Merci
Salut,

en général vaut mieux une seule requête que plusieurs, mais y'a des exceptions... il y a très longtemps j'ai divisé mon temps de génération par deux en augmentant le nombre de requêtes par trois... (bon depuis j'ai tout divisé encore en supprimant les requêtes inutiles suite à un changement d'architecture mais bon...)

C'est pour dire que c'est tellement variable qu'il n'y a pas de réponse valable à ton post, tout au plus pouvons-nous faire des généralités sur les cas les plus probables... bref il ne te reste plus qu'à tester.

a +
<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Commenter la réponse de cs_Anthomicro

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.