|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : février 2009 Messages : 44 ![]() |
Hello.
Est-il possible avec Symfony de charger le contenu d'une table dans une variable globale, de façon à économiser quelques requêtes au chargement de chacune des pages d'un site ? J'ai testé le code suivant dans actions.class : Code :
L'idéal serait donc de renseigner ma variable globale dans projectConfiguration.class. J'ai essayé avec un tableau statique, et ça fonctionne. Par contre, impossible d'accéder à ma base avec le code ci-dessus. J'obtiens le message d'erreur suivant : Citation:
Merci d'avance |
|||
|
|
00
|
|
|
#2 |
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
Salut,
C'est ou que t'economises des requetes la ? Doctrine_Core::getTable('Type') n'execute pas de requete on est bien d'accord ? |
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : février 2009 Messages : 44 ![]() |
euh... oui, c'est de ma faute, j'ai pas copié le bon code ;-)
Code :
|
||
|
|
00
|
|
|
#4 |
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
Mais je comprends pas pourquoi ca te fait economiser une requete. Ca ne fait que la deplacer la, ou alors j'ai pas bien compris.
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2009 Messages : 44 ![]() |
L'idée c'est de renseigner les <option> d'un <select>.
Si j'ai un <select> commun à plusieurs pages, je vais être obligé d'aller chercher mes valeurs dans ma base à chaque changement de page. Alors que si je renseigne mes valeurs dans une variable globale une fois pour toutes, à chaque changement de page, pas besoin d'aller fouiller dans ma base, je renseigne directement mon <select> à partir de ma variable globale. Et si j'ai 10 select sur chaque page, j'économise 10 requêtes à chaque fois... |
|
|
00
|
|
|
#6 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
sfConfig est plus proche d'une constante que d'un stockage intermédiaire.
Pour le faire simplement, tu peux stocker dans le paramterHolder de l'objet MyUser qui est constant entre les sessions. Si tes select sont les mêmes pour tous les utilisateurs, il faudrait voir du côté du cache sfViewCacheManager il est peut-être possible de torturer la chose pour y cacher un array de data. (jamais fais)
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2009 Messages : 44 ![]() |
Merci pour ta réponse !
Effectivement mes <select> seront constants. Pour ta deuxième solution, s'il faut passer à la torture, je crois que je vais laisser tomber. Je ne suis pas encore assez aguerri avec Symfony... Je vais donc opter pour la solution simple Par contre, juste une question, comment on accède au parameterHolder ? |
|
|
00
|
|
|
#8 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Dans le contrôleur tu récupères une instance de l'objet user Ensuite tu peux y arriver directement par les raccourcis de l'objet user et ou récupérer un pointeur sur le Holder par un et utiliser toutes les méthodes qui sont décrites ici.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
10
|
|
|
#9 |
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
Mais Doctrine1 met en cache ta requete non ?
C'est sur en tout cas que si tu fais 10 fois la meme requete avec Doctrine2, il ne fera qu'une seule fois la requete au serveur SQL et ensuite te sert du cache tout chaud. Verifie en faisant 10 fois ta requete dans ton controlleur et regarde ce que le profiler te dit sur les requetes reellement executees. Inutile de reinventer la roue si Doctrine s'occupe deja de tout |
|
00
|
|
|
#10 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : février 2009 Messages : 44 ![]() |
Hello.
Merci Michel pour ta solution. J'avais un peu avancé depuis mon dernier post, et j'étais arrivé à : Code :
Un grand merci pour ton aide !!!! Citation:
Merci à vous deux d'avoir pris un peu de temps pour m'aider ! |
|||
|
|
00
|
|
|
#11 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Doctrine 1 à la possibilité de mettre des requêtes en cache. Cette possibilité n'est pas exploité naturellement dans symfony 1. Je ne suis pas sur qu'elle soit utilisable.
Doctrine 2 (qui tourne avec Symfony2) a la possibilité d'utiliser des proxy, sorte de cache disque ou APC. Ceci accélère largement le traitement des données. Maintenant, d'expérience sur un formulaire affiché, le plus lourd en temps n'est pas l'accès aux données mais le traitement des données après et la transformation du tableau d'option en liste d'option html. Ce traitement peut être jusqu'à 10 fois plus long que la requête elle même (suivant le nombre de données à traiter). Donc ce qu'il serait optimal c'est la mise en cache non pas du tableau des données mais du html généré pour la liste. Hélas cela demanderais la réécriture du widget select...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
Copyright © 2000-2012 - www.developpez.com