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 :

session_start() chronométré et jugé trop long


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut session_start() chronométré et jugé trop long
    Bonjour,

    Petit code de test...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # chargement de classes PHP, constantes etc...
     
    $deb = microtime(true);
    session_start();	
    $fin = microtime(true);
    echo round(($fin-$deb),4);
     
    # suite du code avec Smarty, templates, gestion du cache etc...
    Le résultat s'affichant est souvent 0.0001 et même 0..ça me va...

    MAIS....Aléatoirement, remarqué d'une page à l'autre, le résultat affiché va dépasser les 0.3 secondes sur mon serveur local. Je trouve ce chiffre assez élevé quand on le compare aux résultats de mes différentes requêtes sql et autres traitements qui eux, ne dépassent pas les centièmes de secondes (0.0x).

    J'ai donc testé le code sur le serveur de prod distant (mon hébergeur) et le temps va atteindre jusqu'à 0.8 secondes soit presque 1 seconde pour un session_start() ! Mais toujours aléatoirement cela jongle entre du 0.0002s et du 0.3500 s (3000 fois plus si je ne m'abuse...)

    Est-ce selon vous normal ?

    Certaines personnes (site PHP.net) ont remarqué qu'un favicon (sur Firefox ) est susceptible de créer des requêtes en double sur le serveur...on a vérifié, le pb est le mm sous IE....de toute façon ça ne dépent que du service PHP en principe.

    Pour info : Le session_id(); ne change pas d'une page à l'autre, pas de regénération donc.

    Merci par avance pour vos expertises !
    Développeur Web sénior (2005) spécialisé Symfony2 - Je tiens mon petit blog tranquillement, viens faire un tour http://www.ikonenn.com

  2. #2
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Nouveau test incompréhensible.
    J'ai mis en commentaire la ligne smarty affichant les templates, elle se trouve en bas de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //$smarty->display();
    Tout le reste du code (requête, traitements php) s'exécute entièrement.

    Résultat du echo du chrono est dorénavant toujours égal à 0.0001 ou 0. Je n'ai plus de 0.3 ou 0.8 aléatoires...

    Alors ma question : Pourquoi lorsque je désactive l'affichage des templates à l'écran, le temps d'exécution d'un session_start() est modifié ??

    Je ne vois aucun rapport entre les opérations à moins que smarty me cache quelque chose...temps de compilation / session_start() ?
    Développeur Web sénior (2005) spécialisé Symfony2 - Je tiens mon petit blog tranquillement, viens faire un tour http://www.ikonenn.com

  3. #3
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    J'ai trouvé une nuance étonnante.

    Le chrono du session_start() atteint les dixièmes de secondes (0.4s, 0.8s) lorsque j'arrive sur une page depuis un clic sur un lien de type (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="/page-produit">produit</a>
    Par contre, le chrono est cohérent (0.0001s voir 0s) lorsque j'arrive sur cette même page depuis une ré actualisation de la page OU BIEN depuis un événement de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="document.location.href='/page-produit';"
    Je précise ne pas avoir de paramètres en GET ni en POST.

    Mais où est la relation avec session_start() ?
    Développeur Web sénior (2005) spécialisé Symfony2 - Je tiens mon petit blog tranquillement, viens faire un tour http://www.ikonenn.com

  4. #4
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Problème résolu !

    C'est en regardant les logs d'apache que je me suis aperçu que LA requête d'appel de la page de destination (GET /truc par exemple) était doublée.

    Par conséquent les traitements PHP de cette page de destination étaient eux aussi effectués 2 fois...dont le session_start() et d'où son temps d'exécution plus important.

    J'ai donc regardé mon code HTML pour savoir d'où pouvait provenir ce double appel et me suis aperçu de la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <li onclick="document.location.href='/truc'">
          	<a href="/truc">page truc</a>
    </li>
    Quand on clique sur le <a href... cela appelle 2 fois la page /truc car l'événement onclick du <li> est lui aussi exécuté... mais on ne s'en aperçoit pas à l'écran.

    Initialement je n'avais pas de onclick et en l'ajoutant j'ai oublié de retirer le <a href... qui trainait.

    Tant mieux, j'aurai appris quelque chose d'intéressant !
    Développeur Web sénior (2005) spécialisé Symfony2 - Je tiens mon petit blog tranquillement, viens faire un tour http://www.ikonenn.com

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Rien à voir, mais c'est quoi l'interet d'avoir un onclick sur un <li> ? Pourrir ton référencement ? Diminuer considérablement l'accessibilité de ton site ?

    Je dis ca parce que ca fait plusieurs fois que je vois ce genre de manipulation pour avoir un lien sur tout le <li>, dans ton cas je suppose que tu utilises les <a> mais, desfois que :

    POurquoi ne pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <li>
    <a href="/" title="Accéder a ce lien">Lien</a>
    </li>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    li a {display:block;width:100%;}

  6. #6
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Très bonne remarque, j'avais bien mis le <a href... dans un soucis de référencement et c'est le onclick que je devais virer et non pas l'inverse...Sur le coup la recherche du problème rencontré m'a fais partir sur une mauvaise voie, je corrige ça.
    Merci.
    Développeur Web sénior (2005) spécialisé Symfony2 - Je tiens mon petit blog tranquillement, viens faire un tour http://www.ikonenn.com

  7. #7
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    width:100% ne sert à rien par contre. Un élément de type block prend la taille de son conteneur par défaut.
    Développeur Web sénior (2005) spécialisé Symfony2 - Je tiens mon petit blog tranquillement, viens faire un tour http://www.ikonenn.com

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

Discussions similaires

  1. Enregistrement trop long dans ACCESS (ALTER TABLE)
    Par Arrown dans le forum Bases de données
    Réponses: 2
    Dernier message: 29/07/2004, 20h20
  2. Mot trop long
    Par Toudy dans le forum ASP
    Réponses: 6
    Dernier message: 28/07/2004, 17h51
  3. Chargement de page trop long
    Par t_o_7_ dans le forum ASP
    Réponses: 2
    Dernier message: 19/09/2003, 18h58
  4. [TComboBox] Contenu trop long pour la zone d'affichage
    Par bebeours dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/09/2003, 16h21
  5. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28

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