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 :

L'impact de l'attribut Rendered="false" sur la mémoire


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut L'impact de l'attribut Rendered="false" sur la mémoire
    Je suis en train d'adopter un Design Pattern dans lequel je mettrais la plus part de mes composants (100 environ) sur une page principale et afficher les composants selon le choix de l'utilisateur et mettre le reste des composants non sollicités à .
    Mais ma peur se situe au niveau de la mémoire, je voudrais savoir si un composant qui n'est pas rendu se charge quand même en mémoire, si oui je crois que cela rendra cette page lourde. Sinon, je crois que ce sera très interressant pour moi.

    merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Citation Envoyé par mesken Voir le message
    Je suis en train d'adopter un Design Pattern
    Lequel ?

    Citation Envoyé par mesken Voir le message
    je voudrais savoir si un composant qui n'est pas rendu se charge quand même en mémoire, si oui je crois que cela rendra cette page lourde.
    Si tu fais le new au moment de l'affichage, l'objet ne sera pas préchargé en mémoire (mais l'affichage sera moins réactif). Tu pourras ensuite libérer les composants non visibles en mettant leurs références à null, le garbage collector s'en occupera quand la mémoire disponible sera critique (ou si l'envie lui prend de faire un peu de ménage dans la mémoire). Tu peux aussi utiliser des SoftReference

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Je n'utilise pas d'objets à partir de POJO, les objets que j'utilise ne sont que des object JSF et d'un Framework.
    ce sont simplement des objet dans des Tags. Par exemple <h:commandButton> , <h:outputText>, <h:inputText> ..... Des panels, des dataTables, des Calendar, Ce que je veux savoir c'est, si au chargement de ma page JSF sur laquelle j'ai 50 objets de ce genre et que je décide de mettre 25 objet non rendu du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value = "Bienvenu" rendered="false" />
    . Ces 25 objets par exemple qui ont été mis à Seront-il quand même chargé en mémoire ou c'est au moment ou rendered passera à "true" pour les rendre visible qu'il seront chargé en mémoire

    Merci

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    JSF va générer l'arbre des composants correspondant à la vue actuelle.
    Si elle rencontre des composants dont l'attribut rendered est évalué à false, il va l'ignorer pour le traitement, et ne traitera pas non plus les composants enfants de ce composant "caché". Toutefois, il existera bel et bien dans l'arbre des composants.
    Lors de la génération de la page en HTML, étant donné que le composant est ignoré, le code HTML correspondant ne sera tout simplement pas généré.

    Par contre, je ne comprends pas trop l'intérêt dans une page d'avoir un . Ce serait plutôt un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rendered="#{uneCondition}"
    non ? Parce que sinon, ton composant ne sera tout simplement jamais rendu, donc il est inutile...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Merci bcp. Oui évidement il s'agit de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rendered="#{uneCondition}"
    J''ai juste parlé de false parce que c'est la partie qui m'intéressait le plus.
    Donc si je comprends bien, tous les objets seront chargés en mémoire dans l'arbre des composants . ça risque d'être lourd

    Merci

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    L'arbre des composants est composée de classes Java relativement "simples", dans le sens où il s'agit des versions Java des composants XHTML. Or ce sont des classes qui contiennent essentiellement les propriétés actuelles du composant (les valeurs des attributs si tu préfères).
    Donc à moins d'avoir des milliers de composants, je ne suis pas sûr que la consommation soit un point crucial ici...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  7. #7
    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 : 46
    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
    la consommation des composants est raisonnable. Il y a deux facette:

    1) l'arbre de composant JSF au sens de leur classe java. Sa durée de vie est celle de la requete, il disparait après.
    2) l'aarbre d'état des composant JSF. Il contient toutes les propriétés des composants JSF format la vue. Il est stocké en session ou dans la requete HTTP suivant la startégie adoptée. On peux évaluer sa taille en faisant un appel à saveState() sur la racine de la vue.

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Merci beaucoup de vos explications

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

Discussions similaires

  1. bonne question à propos de l'attribut RENDERED
    Par M.a.n.u. dans le forum JSF
    Réponses: 2
    Dernier message: 26/03/2009, 11h26
  2. attribut "rendered" abcdef
    Par lebesnec dans le forum JSF
    Réponses: 2
    Dernier message: 23/09/2008, 12h15

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