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

ASP.NET Discussion :

Calcul du temps de chargement d'une page


Sujet :

ASP.NET

  1. #1
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut Calcul du temps de chargement d'une page
    Salut,

    Voilà pour mon projet, je dois mettre en place un compteur de temps de chargement des pages, c-a-d du moment où le serveur reçoit la requête jusqu'au moment où la page à terminée de se chargée sur le client.

    Pour ça, j'ai appliqué le fonctionnement suivant :
    1) Un HttpModule qui alimente une variable de session avec la date du jour dans l'évènement PreRequestHandlerExecute()
    2) Un JavaScript dans les pages clientes qui alimente un champ caché avec la date du jour. Le JavaScript est lancé en fin de page HTML (StartupScript)
    3) Dans le page_Load des pages, récupération de la date client et calcul de l'écart entre la date serveur et la date client.

    Bon, outre le fait que je fait la différence entre la date serveur et la date client (ça n'est pas la question ici), j'ai un soucis.
    Quand je fais ça dans un projet de test, pas de PB tout marche.

    Mais une fois dans mon application, ça ne marche plus, je n'ai pas accès aux sessions dans mon HttpModule, que celui-ci implémente IRequiredSessionState ou pas. Je ne comprends pas pourquoi, ça m'énerve. J'ai vu sur différents forum d'autres personnes qui tombent sur ce "bug" d'ASP.Net, à savoir que des fois l'état de session n'est pas accessible dans les HttpModule, et même dans le global.asax (j'ai essayé aussi, marche pas)

    Quelqu'un a-t-il une solution ? où alors une autre façon de calculer ce temps ?
    Merci de vos réponses.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Juste une question: a quoi ça sert ?

  3. #3
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Citation Envoyé par Sphax
    Juste une question: a quoi ça sert ?
    Comme le dis le titre : a calculer le temps mis entre la réception de la requête sur le serveur et l'affichage final sur le client.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Tu peux pas utiliser un TimeSpan entre le 1er evt et le dernier evt de ta page?

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par lutecefalco
    Tu peux pas utiliser un TimeSpan entre le 1er evt et le dernier evt de ta page?
    Ca ne donnerait que le temps entre de traitement serveur de la page; aucun interêt ici.

    Il veut le temps entre la réception de la requête HTTP par le serveur et le réception par le client.

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    exact

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par guitoux1
    Comme le dis le titre : a calculer le temps mis entre la réception de la requête sur le serveur et l'affichage final sur le client.
    Oui d'accord mais ça depend de tellement de paramètres, les performances du serveur, de l'appli, l'heure du client, l'état du réseau etc... que je ne vois pas bien ce que ça indique réellement.

  8. #8
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Citation Envoyé par Sphax
    Oui d'accord mais ça depend de tellement de paramètres, les performances du serveur, de l'appli, l'heure du client, l'état du réseau etc... que je ne vois pas bien ce que ça indique réellement.
    Ca indique le "ressenti" du client face à l'application. Evidement, les résultats doivent être interprétés pour être crédibles. C'est plus au niveau global que les valeurs obtenue sont parlantes, pas pour une requête à un moment t, mais plus de façon générale, combien de temps attend l'utilisateur pour avoir sa page chargée.

  9. #9
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Le problème ne viendrait-il pas d'une restriction de sécurité sur IIS pour le serveur de production ?

  10. #10
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Ben je travaille là avec VS 2005 et son WebServer...

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par guitoux1
    Ca indique le "ressenti" du client face à l'application. .
    Ben non, si tu travailles avec l'heure client, ça n'indique rien du tout; absolument rien à vrai dire.

    Imagine qu'il ait 5 secondes d'écart par rapport à l'heure système serveur(en + ou en -, ce qui est très peu) sur une requête/réponse qui s'exécute en 3 secondes : tes données n'ont plus aucune signification dans ce cas.

    Si il me prenait la fantaisie de faire un truc comme cela, je passerais l'heure serveur au client (comme donnée dans la page), et j'utiliserais le javascript pour faire une réponse "hors-bande" (façon AJAX avant que ce nom soit inventer pour l'attribuer à un concept utilisé depuis des années) en renvoyant l'heure serveur vers une page aspx "bidon" (vide) qui ne sert que de récepteur à l'appel hors bande; donc une requête get faite hors bande sur cette page, simplement pour déclencher l'event load et récupérer l'heure serveur de début de requête et la comparer avec l'heure serveur au moment de l'event page_load. A ce moment bien, sur tu annule la requête hors-bande.

    Là tu peux avoir des données exploitables, mais en aucun cas tu ne peux en avoir de la maniére dont tu veux procéder.

  12. #12
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Citation Envoyé par Bluedeep
    Ben non, si tu travailles avec l'heure client, ça n'indique rien du tout; absolument rien à vrai dire.
    c'est bien pour ça que j'ai précisé :
    Citation Envoyé par Guitoux1
    Bon, outre le fait que je fait la différence entre la date serveur et la date client (ça n'est pas la question ici), j'ai un soucis.
    Le soucis est dans la manière de le faire, pas dans l'utilité de la chose.

    Si il me prenait la fantaisie de faire un truc comme cela, je passerais l'heure serveur au client (comme donnée dans la page), et j'utiliserais le javascript pour faire une réponse "hors-bande" (façon AJAX avant que ce nom soit inventer pour l'attribuer à un concept utilisé depuis des années) en renvoyant l'heure serveur vers une page aspx "bidon" (vide) qui ne sert que de récepteur à l'appel hors bande; donc une requête get faite hors bande sur cette page, simplement pour déclencher l'event load et récupérer l'heure serveur de début de requête et la comparer avec l'heure serveur au moment de l'event page_load. A ce moment bien, sur tu annule la requête hors-bande.
    Je suis effectivement parti maintenant dans un truc de ce genre :
    1) Alimentation d'une session dans le PreRequestHandlerExecute (dans le global.asax ou dans un HttpModule) avec la date T1
    2) Un HttpHandler qui dans la méthode ProcessRequest créé une date T2, récupère T1 et fait le delta (T2-T1). Ces deux dates sont serveur
    3) Le HttpHandler dans le WebConfig est configuré pour agir sur le fichier CalculTemps.axd
    4) A la fin de mes pages Web, ajout d'une balise img : <img src="CalculTemps.axd" />

    Reste que le problème est le même : impossible d'utiliser les sessions dans le global.asax ou le HttpModule, quelque soit l'évévenemtn utiliser (de AcquireRequestSate à ReleaseRequestState). Et ça c'est pas normal, je comprends pas pourquoi

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par guitoux1
    Reste que le problème est le même : impossible d'utiliser les sessions dans le global.asax ou le HttpModule, quelque soit l'évévenemtn utiliser (de AcquireRequestSate à ReleaseRequestState). Et ça c'est pas normal, je comprends pas pourquoi
    A mon avis tu peux te dispenser du HttpHandler (on ets pas à qq millisecondes près) :

    - dans le page_load de ta page réelle tu instancies une classe où tu colle l'heure système.

    - tu colle cette instance dans un dictionnaire global, avec en clef le Hashcode de son objet de session.

    - tu passe à ta page client les données heure system et hashcode de session

    - le javascript de ta page client recupère ces données et fait un appel hors-bande (à l'aide de l'objet browser XMLHTTP-je-sais-plus-quoi; je n'ai pas d'appli asp.net sous la main, là, et ça fait 10 mois que j'ai pas utilisé de l'asp.net)

    - ta page "bidon" de réception de l'appel hors-bande reçoit ces données, avec cela elle récupére dans le dico l'heure de début d'envoie de la page client; y'a plus qu'à faire la différence

  14. #14
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Merci de ta réponse.
    Seulement je dois mettre mon temps de départ avant le page_load. J'ai d'autres traitement qui se font avant le Page_Load que je dois prendre en compte (des HttpModules qui font des traitements).
    De plus, je ne peux pas créer de flux supplémentaires, et donc une solution AJAX (la requête hors-bande que tu propose) n'est pas possible.

    Ce que je pourrais faire pour ne pas utiliser les sessions, c'est ajouter un contrôle type champ caché à ma page dans le PreRequestHandlerExecute, mais je crois pas que ça soit possible, l'objet Page n'étant pas instancié à ce moment là.

    Je trouve pas de solution qui me permette de faire ça sans utiliser les sessions !! Et je ne vois pas ce qui fait qu'elles ne fonctionnent pas dans le PreRequestHandlerExecute.

  15. #15
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    J'ai résolu mon problème de session.
    En fait c'était "simple". Le fait est que la méthode PreRequestHandlerExecute est appelée pour chaque requête gérée par l'API ASP.Net
    Or cette API gère les fichier aspx, mais aussi axd. Et dans mes pages Web, j'ai des ressources JavaScript incorporée via le Handler d'ASP.Net. Or ce handler n'implémente pas l'interface IRequiresSessionState.

    Donc il suffit de rajouter dans ma méthode PreRequestHandlerExecute :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
    {
       /// mon code
    }

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/03/2011, 16h11
  2. Temps chargement d'une page
    Par zaineb.z dans le forum ASP.NET
    Réponses: 3
    Dernier message: 03/03/2009, 10h27
  3. Réponses: 6
    Dernier message: 24/10/2008, 22h24
  4. temps de chargement d'une page html depuis un serveur web
    Par mitoubra dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 08/06/2007, 20h16
  5. Calculer le temp de consultation d'une page web?
    Par Chikh001 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/05/2006, 15h19

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