Passer au contenu

Optimisez une JSP avec la librairie OSCache

Assembler une page dynamique en JSP (Java Server Pages) requiert beaucoup de ressources sur un site à fort trafic. OSCache, un utilitaire open source, optimise les JSP en les cachant en mémoire.

OSCache est une librairie open source fondée sur une observation simple : les JSP (Java Server Pages) passent bien souvent leur temps à assembler sans cesse les mêmes pages, tout simplement parce que les données d’origine n’ont pas changé. Par exemple, lorsque l’on affiche une page d’un catalogue, pourquoi la réassembler complètement et dynamiquement si le contenu du catalogue n’a pas changé depuis le dernier affichage ?Il suffirait de garder la page (ou des fragments de la page) en mémoire, ou sur le disque dur, et de servir cette copie “statique” à l’utilisateur. Le réassemblage dynamique de la page ne se révèle nécessaire qu’en cas de modification des données d’origine. Cette technique offre, outre des performances améliorées, une meilleure disponibilité puisque les pages cachées pourront être affichées même si la base de données se révèle indisponible.La librairie OSCache propose une solution de cache JSP complète. Elle masque en effet des fragments de JSP ou des JSP complètes, en utilisant des politiques de mise à jour (automatique ou manuelle) et de stockage (en mémoire ou sur disque) très flexibles.

1 – Installez la librairie

L’installation d’OSCache dans Tomcat reste très simple. Téléchargez le package OSCache à partir du site opensymphony.com. L’archive contient les sources d’OSCache, ainsi que les fichiers nécessaires à l’installation dans votre serveur d’application.Copiez alors l’archive “oscache.jar” dans le répertoire “Jar” de votre application (WEB-INF/lib) et les deux fichiers texte dans le répertoire “Classes” (WEB-INF/classes), la tag library (“oscache.tld“) et le fichier de configuration (“oscache.properties“). Déclarez ensuite la librairie dans le fichier “web.xml[cf. code ci-contre].

2 – Ajoutez les tags de cache

Recourir à OSCache dans une JSP se révèle d’une grande simplicité. Cet utilitaire est activé sous la forme d’une tag library qui met à disposition de nouveaux tags HTML utilisables dans vos JSP. Pour cacher une portion de page, il suffit de l’entourer des tags et Pour constater l’effet du cache, chargez la page dans un navigateur et rafraîchissez-la à plusieurs reprises. La date non cachée va s’incrémenter, alors que la date cachée restera la même. Si vous rafraîchissez la page exactement 30 secondes après l’heure cachée, vous la verrez se mettre à jour. Cet exemple montre une portion de JSP cachée en mémoire et qui expire automatiquement au bout de 30 secondes.Par défaut, le cache se fera dans le contexte de l’application, ce qui signifie que tous les visiteurs verront le même contenu. Ici, le contenu caché est une simple ligne affichant la date. Il serait parfaitement possible de masquer de cette façon absolument n’importe quelle portion de code dans une JSP existante, il suffit de l’entourer des tags de cache. On peut également demander à OSCache de cacher le contenu dans le contexte de la session utilisateur.Cette option sert à dissimuler du contenu spécifique à l’utilisateur, comme par exemple une vue de ses comptes ou une liste de documents auxquels il est autorisé à accéder. Il est donc possible de conserver la personnalisation du site, même quand le contenu est caché.Au-delà d’un cache rafraîchi automatiquement, OSCache met en ?”uvre très facilement une restauration à la demande ; par exemple, n’expirer du cache une liste d’articles que si un article a été modifié ou supprimé. Cela évite d’avoir à “décacher” des portions de pages régulièrement alors que cela n’est peut-être pas nécessaire. Ce mode opératoire sera utile pour installer une gestion du cache dans l’interface de gestion de contenu, afin de mettre à jour les portions du site qui ont été modifiées.Pour indiquer à OSCache la portion de code à “décacher“, utilisez une clé qui identifiera ce contenu dans le contexte de cache. Cette clé est une chaîne de caractères quelconque, qui doit cependant être unique [cf. code ci-contre]. La première page masque une portion de code dans le contexte de l’application, en lui associant la clé “testcache“.Cette clé est ensuite utilisée dans la deuxième page en paramètre du tag pour demander à ce que le cache soit vidé. Dans une véritable mise en ?”uvre, la clé serait probablement calculée dynamiquement au lieu d’être définie de façon statique : un site marchand pourrait par exemple recourir à un numéro de référence pour dissimuler des fiches de produits et les “décacher” si des informations sont modifiées.

3 – Adaptez les réglages du cache

Le premier paramètre à modifier est le nombre d’objets à cacher en mémoire. Par défaut, en version 1.7.5, OSCache masquera 1 000 objets et, une fois cette limite atteinte, réutilisera des emplacements mémoire selon un algorithme de type LRU (Least Recently Used). Pour augmenter la taille du cache, éditez le fichier “oscache.properties” dans le répertoire “Classes“, puis ajustez la valeur du paramètre “cache.capacity“.D’autre part, il est possible de configurer OSCache pour cacher les fragments de page sur le disque dur plutôt qu’en mémoire. Le cache mémoire, bien que très performant, présente en effet quelques inconvénients. Par exemple, lorsque le serveur d’application est relancé, le cache est perdu, et pendant le temps nécessaire à sa régénération, les performances du site seront dégradées. Pour de très gros sites, la quantité d’informations à cacher peut se révéler trop importante pour tenir complètement dans la mémoire disponible sur le serveur.Pour activer le cache disque, éditez le fichier “oscache.properties“, modifiez le paramètre “cache.path” et donnez-lui comme valeur un répertoire situé sur le disque. Une fois le cache disque activé, tout fragment de page caché en mémoire sera également écrit sur le disque afin d’être disponible même après un redémarrage.Par défaut, quand un fragment est effacé de la mémoire car la capacité du cache est atteinte, il sera également effacé du disque ; le cache disque ne sert alors que de sécurité. Pour obtenir un cache mixte mémoire/disque, demandez à ce que les copies disque soient conservées quand un objet est retiré du cache mémoire : positionnez le paramètre “cache.unlimited_disk” sur “true” dans le fichier “oscache.properties“. Si le paramètre “cache.capacity” est positionné à “1.000“, OSCache conservera donc 1 000 entrées en mémoire et le reste sur le disque.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Thomas Conté