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

JSF Java Discussion :

Temps de réponse côté Web


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut Temps de réponse côté Web
    Bonjour,

    Je suis en cours de réalisation d'une appli Web avec Hibernate, Struts, MyFaces 1.1.5, Tomahawk 1.1.6, RichFaces 3.1.2.

    J'ai déployé mon appli sur serveur Linux Debian Etch, Tomcat 5.5.23, Mysql 5.0.

    Pendant la phase de développement, j'héberge ce serveur chez moi, et les utilisateurs y accèdent pour les tests.
    Les requêtes depuis Internet passent par un autre serveur sous Linux Debian Sarge + Apache Http 2 + Connecteur Mod_JK.

    Depuis le réseau local (en interrogeant le serveur Apache Http frontal), l'application est fluide. Pour afficher un écran complexe, il faut maxi 2 secondes.

    Depuis Internet, plusieurs personnes ont fait des tests, cette même page met 6 à 14 secondes.

    Tests sur ma ligne :
    - Débit en Download : 1700 à 2100Kbps
    - Débit en Upload : 700 à 800Kbps
    - Ping : 70 à 110ms

    J'ai regardé avec l'extension Firebug pour Firefox, le poids de cette page :
    - Fichier HTML : 62Ko
    - Fichiers CSS : 19ko
    - Fichiers Images : 41Ko
    - Fichiers JavaScript : 489Ko <==
    - Cela représente 45 requêtes

    Les fichiers JavaScript proviennent de la librairie RichFaces. J'ai ajusté 2 paramètres dans le web.xml pour compresser les scripts (on passe à 325Ko au lieu de 489) et activer le cache des scripts.

    Mais :

    1 - Les temps de réponse ne semblent pas meilleurs, même quand l'utilisateur de télécharge que les 62Ko d'HTML (le reste provenant du cache, d'après Firebug).

    2 - Le cache est très peu utilisé. Explication :
    - Cette fameuse page permet d'afficher le dossier d'une personne. Pour chaque personne dont on ouvre le dossier, on veut l'ouvrir dans un nouvel onglet : 1 personne = 1 onglet. Je gère cela avec la propriété "target" du lien, pour ouvrir un dossier dans une "window" dont la propriété "name" est égale à l'identifiant de la personne.
    Et de ce fait, j'ai l'impression que le cache ne fonctionne pas.
    Si je modifie un dossier, le dossier est réaffiché dans la même fenêtre => Le cache fonctionne
    Si j'ouvre le dossier d'une autre personne (donc dans un autre onglet) => Il retélécharge tout.

    Autre précision : on utilise Firefox comme navigateur (appli optimisée pour Firefox).

    Auriez-vous des pistes à me suggérer ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    As tu vérifié entre le serveur local et le serveur distant:


    La différence au niveau config JVM (ex passage de -Xmx 512M en dev à -Xmx 64M en production), qui se traduirais par une utilisation intensive du garbage collector
    La différence au niveau de la charge CPU en temps normal (le serveur héberg-t-il d'autres services qui entrent en concurrence avec ton appli)
    La différence au niveau mémoire système (se peut-il que le serveur swap fortement)
    La différence au niveau utilisateurs (le serveur production est-il occupé d'encaisser 50x plus de requetes que le celui de dev?)
    La différence au niveau DB (d'autre application accèdent-elle aux même tables en production, entrainant des lock au niveau DB)

    Ne cherche pas coté débit, même 1M, çà doit pas mettre 14 secondes à arriver par ADSL...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Merci pour ton aide.

    Je me suis peut-être mal exprimée : pour l'instant, il n'y a qu'un serveur de dév qui héberge Tomcat+MySql, et pas de serveur de Prod (je suis encore en phase de dev).

    En fait, il y a un autre serveur, c'est celui qui héberge Apache HTTP en frontal, et qui redirige les requêtes au serveur hébergeant Tomcat, via le connecteur mod-jk.

    Il y a très peu de personnes à s'y connecter (1 ou 2 à la fois maxi).
    Et le problème ne semble pas venir de l'appli Java, d'après ce que je vois dans les logs Tomcat, et ce que je constate en testant sur le réseau local (je teste sur le même serveur Tomcat, en passant par le même serveur HTTP frontal, mais depuis un poste client qui se trouve sur le réseau local et non pas sur Internet).

    Je viens de faire un simple calcul, que je n'avais pas fait jusqu'à présent (ou avais-je la tête !!) :
    La bande passante en upload est de : 800kbps, soit 100ko/s
    La page avec tous les scripts associés pèse pas loin de 500ko. Il faut donc 5 secondes pour télécharger tout ça, si je ne dis pas de bêtises !
    Donc l'explication serait tout simplement là...

    Mon problème se résume donc à trouver une solution pour que les librairies JavaScript, images, etc. soient lues dans le cache du navigateur, quand j'ouvre une nouvelle fenêtre.

    Quelqu'un a-t-il déjà eu ce problème ? Ou tout simplement une idée ?
    Merci.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    J'ai observé les entêtes HTTP des images et fichiers JavaScript, lorsque j'accède directement au serveur Tomcat (sans passer par Apache Http).
    Est-ce normal que j'ai des "No-cache" dans l'entête HTTP ?

    Voici ce que m'indique Firebug :
    - Pour une image insérée avec le tag <t:graphicImage> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Response Headers
    Server	Apache-Coyote/1.1
    Pragma	No-cache
    Cache-Control	no-cache
    Expires	Thu, 01 Jan 1970 01:00:00 CET
    Date	Tue, 30 Oct 2007 22:50:57 GMT
    - Idem pour un fichier JavaScript inséré avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="<%= request.getContextPath()%>/js/utils.js"></script>
    - Pour un script RichFaces, sur la 1e page (accueil) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Response Headers
    Server	Apache-Coyote/1.1
    Pragma	No-cache
    Cache-Control	max-age=86400
    Expires	Wed, 31 Oct 2007 22:50:57 GMT
    Last-Modified	Tue, 30 Oct 2007 22:50:23 GMT
    Content-Type	text/javascript
    Content-Length	20283
    Date	Tue, 30 Oct 2007 22:50:57 GMT
    - Le même script, sur une autre page de l'appli ouverte dans un autre onglet, avec un lien avec "target" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Response Headers
    Server	Apache-Coyote/1.1
    Pragma	No-cache
    Cache-Control	no-cache
    Expires	Thu, 01 Jan 1970 01:00:00 CET
    Last-Modified	Tue, 30 Oct 2007 22:50:23 GMT
    Content-Type	text/javascript
    Content-Length	20283
    Date	Tue, 30 Oct 2007 23:19:22 GMT
    Je ne comprends pas bien comment sont gerés ces entêtes HTTP, ni qui les gère :
    - Est-ce MyFaces et/ou RichFaces qui positionnent ces "no-cache" ? => J'ai trouvé un bug en relation avec mon problème ([TOMAHAWK-774] - Browser does not cache resources), mais il aurait été corrigé dans Tomahawk 1.1.5, et j'utilise la v1.1.6
    - Est-ce Tomcat ? => J'ai trouvé dans la doc un paramètre "cachingAllowed", mais par défaut il est à true. Et même en positionnant de façon explicite ce paramètre, ça ne semble rien changer.

    Quelqu'un saurait-il me dire :
    - comment agir sur l'entête HTTP des images et JavaScript avec JSF / RichFaces ?
    - ce qu'il faut mettre dans ces entêts pour activer le cache ?

    Merci d'avance.

Discussions similaires

  1. Réponses: 13
    Dernier message: 21/04/2010, 14h49
  2. Réponses: 5
    Dernier message: 17/11/2004, 21h29
  3. Ressources, temps de réponse, requète ...
    Par _____M_____ dans le forum Administration
    Réponses: 16
    Dernier message: 31/03/2004, 16h12
  4. Temps de réponse : objet TTable (BDE)
    Par lirva dans le forum Bases de données
    Réponses: 5
    Dernier message: 12/12/2003, 00h50
  5. Temps de réponse entre deux sites
    Par coup dur dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 16/10/2003, 15h26

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