Bonjour,

J'ai une question toute bête mais dont la réponse me serait vachement utile, en ce moment je suis en train d'écrire une classe avec toutes les méthodes pour interagir avec la BD mais je me demande s'il vaut mieux :

1) Chaque méthode envoie les requêtes nécessaire à la BD indépendamment des autres méthodes, par exemple si j'ai une méthode affichePseudo ben ça fera un SELECT dans la BD.

2) Dans le constructeur de la classe, je récupère l'entrée correspondante au membre connecté puis je mets ça dans $_SESSION et dans ce cas chaque méthode passera par la $_SESSION pour modifier des données puis à la fin du chargement de la page s'il y a eu des modifications (marquage des méthodes faisant des modifications) je fais un UPDATE de toute l'entrée correspondante.

3) Autre solution

Donc à votre avis que dois-je faire pour avoir les meilleures performances possible ? sachant que la première solution génère beaucoup de requête à la base de données mais que la deuxième je pense utilise +de ram.

7 réponses


Xtr3me
Réponse acceptée

Ramzz qui part un peu en sucette j'ai envie de dire ;) .
Je cite:

Si ce n'est pas stocké en session, les données seront perdus à chaque rafraîchissement de page et il devra se reconnecter à chaque fois.

C'est justement pour ça qu'il demande s'il est préférable de stocker en Session ou de faire une requête SQL sur chaque page.

Pour répondre à Wapaca il sera d'un point de vue performances bien mieux d'écrire ça dans une Session que de faire des requêtes inutiles il faut toujours essayer au maximum de minimiser le nombre de requêtes SQL qui demanderait d'utiliser le processeur et la RAM du serveur pour rien. En écrivant le tout dans une Session tu économiseras en ressources ce qui est un bon point tu pourras récupérer le pseudo quand tu le souhaites , si tu fais une mise à jour du profil tu mets simplement à jour la Session en cours rien de plus pas besoin de se casser la tête.

Les Sessions sont un dérivé des cookies mais réservés au serveur de ce fait tu sécurises aussi le site même si une Session peut toujours être modifiée ça reste plus difficile d'accès que la modification d'un cookie.
Evites d'envoyer des variables en GET essayes le plus possible de les faire passer en POST ou autrement.

Bonjour,

Ma compréhension de la question n'est peut-être pas parfaite mais je crois avoir compris ce que tu veux dire. Il faut voir une classe comme un service qui sera rendu à d'autre. Plus tu fais général, plus tu pourras l'utiliser ailleurs et dans tes autres projets. Dans ton cas, tu veux gérer les interactions avec une base de données. Dans ta classe, il ne sera certainement pas question de pseudo ou d'utilisateur mais seulement du langage et des différentes méthodes qui te serviront. Par exemple, tu pourrais avoir une méthode qui ferait une recherche classique (SELECT) et qui te retournerait le premier résultat selon des conditions ou un identifiant. Un peu comme le modèle MVC le propose, il y a un Model très général qui s'occupe de la connexion à la base de données et fournit toutes les méthodes aux classes qui l'utiliseront (Class2 extends Class1).

// C'est probablement une classe comme celle-ci que tu es en train de faire
class Model
{
    function __construct()
    {
        // On pourrait par exemple générer la connexion... ce n'est qu'une
        // possibilité parmi pleins d'autres.
    }

    public function methodeA()
    {
        // Cette méthode recherche dans la base de données.
    }
}
class Avion extends Model
{
    // Maintenant, toutes les méthodes de Model peuvent être utilisés dans 
    // cette nouvelle classe Avion.
    function obtenirAvions()
    {
        return $this->methodeA();
    }

}

Je ne sais pas si cela a pu t'aider. :p

Bonne chance,
Ramz.

Wapaca
Auteur

Non tu réponds complètement à côté.

Je vais tenter de mieux m'expliquer :

J'ai déjà mes méthodes généralistes comme tu me le montres mais maintenant je me demande quand utiliser ses méthodes qui font des requêtes à la base de données si à chaque fois que je dois afficher le pseudo du membre par exemple est-ce que je dois utiliser ma méthode affichePseudo qui fait une requête à la base de donnée pour récupérer le pseudo ce qui génèrerai 1 requête par affichage du pseudo dans la page ou si je dois plutôt sauvegarder les informations dans les $_SESSION pour pouvoir les réutiliser ensuite et ne sauvegarder les données modifiées s'il y en a qu'en fait de page ?

En gros ma question si tu n'as pas compris (je sais que je ne sais pas bien expliquer ne t'en fais pas ;) ) pour la même méthode affichePseudo il vaut mieux que je fasse un SELECT pour récupérer le pseudo de l'utilisateur ou alors il vaut mieux que dès que quand je créer l'objet depuis le constructeur je charge l'entrée correspondante à l'utilisateur dans $_SESSION'utilisateur'] pour pouvoir y accéder sans faire de requête à la base de donnée puis s'il y a modification des variables dans $_SESSION'utilisateur'] je fais un UPDATE à la fin de la page pour sauvegarder les modifications.

Je pose la question car je suis sur un mutualisé et le nombre de requête par page est assez impressionnant au final mais je ne sais pas s'il vaut mieux occuper de la ram ou prendre des ressources au niveau du CPU et disque dur vis à vis de l'hébergeur.

Ah excuses-moi alors. :p

Dans le cas des utilisateurs, il est certain que tu devras garder les données en session pour éviter de répéter du code ou bien de mettre du code ou il ne faudrait pas. Si ce n'est pas stocké en session, les données seront perdus à chaque rafraîchissement de page et il devra se reconnecter à chaque fois. Par contre, pour ce qui est de ton update, si tu modifies un utilisateur, tu dois le mettre directement à jour (UPDATE) car la session est effacée lorsqu'un utilisateur ferme son navigateur (tu ne peux pas vraiment déterminer à la seconde même quand il aura disparu du site web). Tu peux effectuer la mise à jour lorsque celui-ci envoi des données en $_POST (ou $_GET à la limite).

J'espère avoir répondu à la question cette fois-ci.
Ramz.

Wapaca
Auteur

"Dans le cas des utilisateurs, il est certain que tu devras garder les données en session pour éviter de répéter du code ou bien de mettre du code ou il ne faudrait pas."

Comment ça ?

Ensuite pour la deuxième partie pareil c'est HS vu que dans mon cas les données en $_SESSION seront utilisées entre le début du chargement de la page et la fin du chargement de la page dans l'hypothèse où je prend la méthode 2.

Wapaca
Auteur

Ok merci, c'est ce que je me demandais justement.

Pour ce qui est des $_SESSION je sais déjà ce que c'est mais merci de l'avoir précisé et pour ce qui est de ton affirmation sur les $_GET ça dépend des cas si c'est pour de la pagination par exemple là vaut mieux utiliser une variable dans $_GET mais après un formulaire là c'est clair qu'il vaut mieux passer par du $_POST.

Oui tu peux pas toujours t'en passer mais ça reste un MUST d'en avoir un minimum histoire que les utilisateurs lamba s'amusent pas à faire n'importe quoi ^^ .