2010-03-23 6 views
2

Mon application a une structure MVC.Meilleures pratiques pour la mise en cache des résultats des pages JSP?

Est-il suffisant de mettre en cache uniquement les objets de modèle transmis aux vues JSP?

Ou y aura-t-il une amélioration significative des performances de la mise en cache des résultats du rendu des vues JSP?

+0

La question est un peu vague. Évidemment, ce que vous cachez n'a pas besoin d'être recalculé alors que les données mises en cache qui sont invalides (périmées) représentent un gaspillage d'espace - le compromis classique espace/temps. Les requêtes de base de données sont-elles plus chères que le rendu? Probablement, mais seule la mesure peut vous le dire avec certitude. – msw

+0

En plus du compromis espace/temps, il est souvent très difficile de savoir si les données mises en cache sont toujours valides ou non. – Thilo

Répondre

1

Je n'entrerai pas dans les détails. En supposant que vous savez ce que vous faites.

Maintenant, pour répondre simplement à votre question. Nous ne mettons pas en cache les vues JSP. Habituellement, nous mettons en cache les résultats de la base de données pour les requêtes qui seront largement utilisées. Au fait, comment prévoyez-vous mettre en cache vos vues JSP?

+0

+1, j'ai un filtre global qui peut voir le résultat de la vue, donc je peux mettre en cache les pages avec ça. Au départ, je pensais que seule la mise en cache du modèle serait suffisante, mais je me souviens avoir lu sur le blog de stackoverflow qu'ils voyaient de grandes améliorations en mettant en cache des parties de leurs vues. Ils utilisent cependant ASP.NET MVC, peut-être que le rendu des vues est plus coûteux que le rendu des JSP? – Kyle

0

Voici l'algorithme mental que j'utiliser:

  1. rencontrez des problèmes de performance que vous (autrement dit: est votre site lent)? Si « non » pas de goto 6.
  2. Profil du code pour trouver les goulots d'étranglement (soit un véritable outil de profileur ou tout simplement ajouter minuteries qui mesureront le temps nécessaire pour la demande, etc.)
  3. Trouver les goulots d'étranglement en fonction de la Essayez de trouver une solution algorithmique, c.-à-d., calculez le même résultat d'une manière différente qui nécessite moins de ressources qui limitent votre goulot d'étranglement. Si vous trouvez un tel algorithme, implémentez-le et passez à l'étape 6.
  4. Décidez d'une stratégie pour atténuer ce goulot d'étranglement. La mise en cache est une solution à un type de problème. Dans les sites Web, le ralentissement est souvent dû au téléchargement de données. Dans ce cas, vous pouvez placer tout votre contenu statique sur un serveur dédié (domaine différent) et demander aux pages Web de spécifier le contenu du site statique. Le navigateur ouvrira une deuxième connexion au site statique, ce qui améliorera considérablement les performances.
  5. Refactorisez le code pour le rendre maintenable, bien structuré, moins sujette aux erreurs.
0

J'utilise session possibilités de par la mise en cache du menu utilisateur:

<c:if test="${empty JSPCACHE_menu}"> 
    <c:set var="JSPCACHE_menu" scope="session"> 
    <ul id="user-menu">...</ul> 
    </c:set> 
</c:if> 
${JSPCACHE_menu} 

Avec application portée et c:if contrôles que vous pouvez mettre en cache les valeurs entre tous les utilisateurs (par exemple les taux de change):

<c:set var="newCurrencyTS" value="currencyService.newCurrencyTS()"/> 
<c:if test="${JSPCACHE_currencyTS.time < newCurrencyTS.time}"> 
    <c:set var="JSPCACHE_currencyWidget" scope="application"> 
    <ul> 
     <c:for var="i" items="${currencyService.getActualRates()}"> 
     <li>...<li> 
     </c:for> 
    </ul> 
    </c:set> 
    <c:set var="JSPCACHE_currencyTS" value="${newCurrencyTS}" scope="application"/> 
</c:if> 
${JSPCACHE_currencyWidget} 
Questions connexes