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 :

Premier chargement de page, prerender trop long


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Premier chargement de page, prerender trop long
    Bonjour,

    J'ai tenté des recherches mais rien n'est vraiment probant.
    Je vous expose le problème :
    - j'ai une appli qui tourne sur une machine (pas forcément avec un OS serveur mais assez bodybuildée quand même, en revanche qui est redémarrée tous les jours).
    - mon site est partiellement en ASP, et partiellement en ASP.NET.

    lorsque l'utilisateur navigue pour la premiere fois sur une page ASP.NET, le chargement est trop long (14 secondes en l'occurence passées entre le prerender begin et prerender end des traces ASP.NET).

    Les prochaines navigations sur cette page sont instantanées.
    De même, si je ferme IE et que je retourne sur cette page avec un autre utilisateur, cela fonctionne parfaitement.

    J'utilise des composants tiers (devexpress) qui peuvent être un peu plus complexes que ceux ASP.NET classiques, mais rien qui justifie un tel temps de chargement.

    J'ai tenté vainement d'améliorer ces performances, en utilisant les techniques suivantes :
    - retrait de la vérification des certificats des composants clients (dans le aspnet.config) : ca m a fait gagner quelques secondes mais pas suffisamment.
    - precompilation du site avec aspnet_compile, aspnet_merge et même ngen (gain de l'ordre de 1 seconde)

    Mon site est configuré en release, la plupart du reste de la configuration est restée aux valeurs par défaut.

    J'attends donc des pistes de réflexion, à défaut de réelles solutions
    Tsu
    A vaincre sans péril, on triomphe sans gloire

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    La question est : fais-tu quelque chose dans le prerender ou pas ? Si oui essaye de tracer l'exécution de ce code.

    Sinon je dirais que le comportement est assez "normal" (identique à un iisreset), iis et aspnet recompile ton site.

    Si tu n'effectues aucun code, une option (pourrie) serait de faire charger directement après le reboot la page, comme ça certes il y aura ce chargement long mais il sera transparent pour l'utilisateur.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Détails
    Non je n'ai aucun code a moi dans le prerender.

    Concernant l'alternative, je m'interroge sur la possibilité de le faire sachant que l'accès à cette page est dépendant d'une authentification (pas disponible juste en tapant une URL notamment)

    Peut on déclencher des exécutables lors d'un reboot IIS? l'as tu déjà fait?

    J'ai tenté des recompilation "manuelles" que je pourrais automatiser (aspnet_compiler etc...) mais apparemment ce n'est pas encore suffisant.
    Tsu
    A vaincre sans péril, on triomphe sans gloire

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Si le redémarrage de IIS est manuel tu peux créer un .bat et une tâche planifiée qui fait un iisreset et lance une console qui va réveiller ton application en appelant des pages. Cela permet à ton site de se charger une première fois.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Sinon, une idée serait de faire un site simple (sans composant DevExpress notamment) et voir son comportement. Si cela est plus rapide, demande à DevExpress !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    ostenhard:
    J'ai sollicité aussi devexpress, ils annoncent que la page est assez complexe (une 15aine de composants graphiques).
    Ils n'excluent pas d'autres pistes de réflexion comme la compression HTTP...
    Cela m'amène tout de même à plus de 5 secondes au premier chargement.
    J'ai une autre page sans composant devexpress dans mon site, qui présente le même comportement.

    Immobilis:
    mon serveur redémarre au démarrage de la machine, sinon je n'aurai pas particulièrement de prise sur lui quand je serai en prod.
    Ceci dit ton idée de batch m'intéresse, tu proposes que je lance des c:\program files\...\iexplore.exe http://localhost/monsite/pageLourde.aspx?
    Est ce que le système de login ne va pas poser soucis?
    Ca risque d'ouvrir des pages IE ca non?

    Merci déjà d'essayer de m'aiguiller ^^
    Tsu
    A vaincre sans péril, on triomphe sans gloire

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    En fait il faut savoir que IIS se "met en veille" tout seul au bout d'un certain temps.
    Ainsi en sortant de la veille ou au démarrage, IIS a besoin de charger toutes les bonnes dll ce qui peut être couteux lors du premier démarrage.

    Ce que tu peux faire, c'est comme suggéré au dessus, un petit utilitaire qui toutes les 10mn va charger l'index de ton site. Ca empeche IIS de s'endormir.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    OK pour le service de warmup sur l'index de mon site.
    Ceci dit, mon site, et notamment sa page par défaut sont en ASP, seules quelques pages récentes sont en ASP.NET.
    si je simule un hit sur la page index (en ASP classique donc) cela gardera t il mes pages ASP.NET compilées?
    Tsu
    A vaincre sans péril, on triomphe sans gloire

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Normalement c'est le même pool applicatif sur IIS donc je dirais oui.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Voici quelques nouvelles concernant mon problème (je pense que la solution proposée par Nathanael devrait résoudre le problème mais présente pas mal d'inconvénients dans le sens ou mes clients refusent en général le déploiement de services pour cause de risques de sécurité. J'aimerais donc vraiment voir si on peut trouver une autre solution)

    J'ai transmis un site avec injection de données au support devexpress et leurs tests indiquent une performance excellente ! (un snap firebug montre clairement que le chargement de la page n'excède pas la seconde). Chez moi c'est complètement différent, en utilisant le même outil je tombe sur 5 secondes.
    Le chiffre est intéressant puisque nous avons de sur la meme structure de page. Seules les données sont bricolées et ne passent pas par un accès à la base de données. J'obtiens mes 5 secondes avec le même accès aux données 'bricolées' (classe de mocking).

    Je suppose que les configurations changent mais avez vous l'expérience d'un gain de performance aussi net entre IIS 5.1 et les versions ultérieures?

    D'ou cela pourrait il bien venir?
    Tsu
    A vaincre sans péril, on triomphe sans gloire

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Voici au final ce que j'ai trouvé... mon problème à été résolu en loadant un first dans une iframe cachée dans la page de login... c'est pas fameux mais ca fonctionne.

    Voici comment le temps est perdu:
    - d'une part il est clair que la vérification de la révocation des certificats est couteuse... mais comme c'est un setting du framework, difficile d'assurer de la co résidence dans ce cas.
    - d'autre part, il existe vraiment un temps additionnel au premier pre render, mais il n'est pas aussi grave que ca.
    - par contre la ou j'ai été surpris, c est que Entity framework a un temps d'initialisation atrocement long. C'était lui le principal coupable...

    Donc le preloading, instancie entity framework et c'est gagné ^^
    En espérant que ca pourra servir a quelqu'un un jour
    Tsu
    A vaincre sans péril, on triomphe sans gloire

  12. #12
    Candidat au Club
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Tsunamis Voir le message
    Voici au final ce que j'ai trouvé... mon problème à été résolu en loadant un first dans une iframe cachée dans la page de login... c'est pas fameux mais ca fonctionne.

    Voici comment le temps est perdu:
    - d'une part il est clair que la vérification de la révocation des certificats est couteuse... mais comme c'est un setting du framework, difficile d'assurer de la co résidence dans ce cas.
    - d'autre part, il existe vraiment un temps additionnel au premier pre render, mais il n'est pas aussi grave que ca.
    - par contre la ou j'ai été surpris, c est que Entity framework a un temps d'initialisation atrocement long. C'était lui le principal coupable...

    Donc le preloading, instancie entity framework et c'est gagné ^^
    En espérant que ca pourra servir a quelqu'un un jour
    Bonjour, j'aimerais savoir s'il vous plait le code qu'il faut écrire !!!

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

Discussions similaires

  1. Chargement d'images chiffrées trop long
    Par iBen68 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 27/11/2012, 12h00
  2. Temps de chargement trop long pour animation légère
    Par CharlyMops dans le forum Flash
    Réponses: 1
    Dernier message: 27/09/2006, 07h13
  3. Réponses: 5
    Dernier message: 15/09/2006, 16h58
  4. Passage d'une page web à une autre TROP long
    Par minusette dans le forum Web
    Réponses: 16
    Dernier message: 27/10/2005, 17h40
  5. Chargement de page trop long
    Par t_o_7_ dans le forum ASP
    Réponses: 2
    Dernier message: 19/09/2003, 18h58

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