IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Optimiser un script forum en évitant les sessions


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut Optimiser un script forum en évitant les sessions
    Salut à tous. Je suis en train de développer un forum pour mon site internet. J'ai cherché un moyen de faire une classification messages lus/non-lus, comme on trouve sur tous les forums modernes. La seule solution que j'ai trouvé est de créer une variable de session pour chaque discussion ouverte. Je m'explique : pour tous les messages, j'utilise bien sur le système de timestamp, je compare le timestamp de la discussion à celui de la dernière connexion utilisateur. Pas de problème question optimisation. Mais si au cours de la visite, l'utilisateur regarde une discussion, elle doit être vu ensuite en 'lu'. Chose impossible avec la seule comparaison de timestamp. Donc, quand l'utilisateur regarde une discussion, une variable session est crée, de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['viewthread'. $id_thread]
    Cependant, j'imagine vite le bordel du serveur si plusieurs utilisateurs regardent plusieurs discussions au cours de la durée de vie de leur session . Beaucoup de variables de session vont être créer sur le serveur. Donc ma question est : cela est il nuisible pour le confort d'utilisation (le serveur va ramé ?), y a t-il une solution différent pour réaliser ce que je veux faire ?!
    Merci.

  2. #2
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Je ne peux pas te dire pour la question des performances du serveur... Je serais tenté de dire que ça ne posera pas de problème, au pire un utilisateur visite quelques dizaines de discussions durant sa session, ça ne fait pas très très gros niveau taille du fichier... Mais bon, un membre plus expérimenté que moi aura sûrement la réponse !

    Sinon, je ne vois pas trop comment faire d'autre... Peut-être avec une sorte de variables de session dans la db ? Genre quand un utilisateur lit une discussion, tu insère une entrée temporaire dans une table ?

    Mmmmh... Ca n'a aucun sens, ça revient au même que des variables de sessions, sauf que c'est moins performant ...

    Non, à mon avis ta technique va bien ! Tu attends beaucoup de monde sur ton forum ? Je me demande comment c'est géré ici sur DVP...

  3. #3
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Bah pour le nombre de visiteur j'en sais rien, ça dépend de la réussite de mon site . Merci de la réponse en tout cas, je vais rester à cette solution, néanmoins, je laisse la discussion ouverte si quelqu'un a une alternative à cette solution barbare . Merci.

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    La solution la plus robuste est de conserver l'état pour chaque discussion et chaque utilisateur. Lorsqu'un utilisateur lit une discussion, enregistre en BDD le timestamp, l'id de la discussion et l'id du dernier message affiché, en plus de l'id utilisateur. Ce ne sont que quatre champs numériques.
    La clef primaire doit être id_thread + id_utilisateur, les deux autres champs étant des informations qui changent avec le temps. Utilise l'instruction REPLACE INTO si tu as MySQL, cela simplifiera les traitements.

    Un truc à propos de création de sites Web : ne te préoccupe pas des performances si la solution ne te semble pas sincèrement lourde. Tu pourras optimiser quand le site sera prêt, mais l'objectif actuel est qu'il soit prêt

  5. #5
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut!

    Il me semble bien que la taille du fichier temporaire de la session est limitée. Si tu enregistres trop d'informations, tu vas saturer. La solution est d'utiliser la base de données pour sauver ces informations, comme le suggère Yogui.

    Cordialement.

    [EDIT] -> 4ko maximum pour une session

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Surtout que, d'une session sur l'autre (d'un jour sur l'autre par exemple), ces informations seront perdues si elles ne sont pas mises en BDD...

  7. #7
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    C'est juste ! Et les messages ne seront pas lus pour autant ...

    La DB me semble donc une bonne solution ! Mais pour un gros forum, est-ce que ça ne fera pas beaucoup de données ? Sauvegarder l'état de chaque discussion pour chaque utilisateur, ça fait beaucoup (produit cartésien des deux tables...) !

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Non, fort heureusement, ce n'est pas le produit cartésien des deux tables !
    Pour rappel, le produit cartésien de deux tables est chaque tuple d'une table pour chaque tuple de la seconde... Cela inclut tous les champs, alors qu'ici il ne s'agit que de 4 identifiants numériques (taille max chaque : 11).

  9. #9
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Donc si cette solution est plus adaptée, pourquoi ne pas la mettre en place .
    Seulement, je ne vois pas vraiment la structure de la table que tu m'as décrites Yogui, pourrais-tu m'expliquer ? Merci

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Euh, sans avoir ta structure de tables à toi, je vais devoir te donner ma théorie...

    thread (id, title)
    message (id, title, contents, post_date, status, #id_thread, #id_author)
    user (id, login, password, register_date)
    message_read (id_thread, id_user, #id_message, read_time)

  11. #11
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    C'est bon merci j'ai compris... enfin. Juste que je comprend pas l'intéret de read_time. En quoi elle pourrait m'être utile ?

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    C'est une question d'habitude, toujours mettre un timestamp à tout ce qui est fait en BDD, sinon c'est difficile de faire des stats. Tu n'es pas sans savoir que les statistiques sont un outil fondamental pour un webmestre ?

  13. #13
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Non, j'étais pas au courant . Puis, j'ai que 15 ans, c'est mon deuxième site (enfin, la reconstruction totale de mon deuxième site ), donc... C'est horrible, j'ai passé 5 mois à faire le site pour me rendre compte que mon site était nul, et ce n'est que maintenant que je comprend mieux le fonctionnement de Php/MySQL. Tu sais, ce déclic qu'on a, sans savoir pourquoi, mais on comprend bien mieux, on a un meilleur recul, on appréhende plus facilement les problèmes rencontrés. J'ai eu la même chose pour la POO . C'est peut etre ça qu'on appelle l'expérience . Bon je raconte un peu ma vie alors je m'en vais terminer mon forum moi...

  14. #14
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Au temps pour moi et mon erreur concernant le produit cartésien ! Ce que je voulais juste dire, c'est que ça pourrait quand même faire beaucoup ? Mais bon, pas tant que ça non plus ...

    Bref, solution à implémenter donc !

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Si vraiment l'espace nécessaire te préoccupe, tu peux mettre en place un système de suppression des enregistrements concernant les sujets inactifs ou quelque chose comme cela

  16. #16
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Je vais implémenter tout ça. Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. Script pour gérer les sessions utilisateurs sous Ubuntu
    Par thucydide dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 08/06/2012, 11h51
  3. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo