Introduction

A chaque fois qu'une page web est demandée, les extractions depuis la base de données sont effectuées pour afficher ces dernières reflétant ainsi l'état de la base. Pour certaines de ces extractions, comme les tables de référence par exemple, changent peu ou pas et d'une requête sur l'autre les données sont toujours les mêmes. Ces extractions étant couteuses pour le calcul de la page, il serait interessant de les minimiser.

La XMLInstruction Cache permet de conserver en mémoire certaines données qui n'ont pas besoin d'être extraites de la base de données à chaque requête permettant ainsi d'optimiser le temps de réponse de l'application. Nous allons voir dans cet article le fonctionnement de l'instruction Cache, son utilisation et le gain en performance qu'elle apporte à vos applications XMLRAD.

Fonctionnement de l'instruction Cache

La XMLInstruction Cache dans un XMLGram permet de stocker en mémoire une grappe XML qui va correspondre à une partie de l'OutputDoc qui sera ajouter a chaque requête.

Image non disponible

Les instructions qui sont filles de l'instruction Cache vont écrire lors de la première fois le résultat de leur exécution non pas directement dans l'OutputDoc mais dans la grappe XML gérée par l'instruction Cache.

Lors de l'exécution de l'instruction Cache, s'il n'y a aucun document XML en cache, les instructions filles sont exécutées, sinon le contenu de la grappe XML en cache est ajouté à l'OutputDoc sans avoir à exécuter les sous-instructions.

La mise en cache peut être faite en fonction de paramètres définis au niveau de l'instruction. Pour chaque valeur de paramètre une grappe XML sera mise en cache.

Utilisation de l'instruction Cache

Nous allons prendre comme exemple un écran de modification des ORGANIZATION de la base de données Training.mdb. Nous allons créer un XMLService FormORGANIZATION avec le wizard Simple Form.

Image non disponible

Parmi les champs de l'organisation, il y a COUNTRY_ID qui n'est pas très explicite et qui n'est pas très pratique de modifier. A la place d'un champ texte simple nous voulons une combobox qui permet le choix du pays parmi la liste des tous les pays. Pour avoir cette liste, il nous faut l'extraire de la base de données et qu'elle soit ajoutée dans l'OutputDoc. Nous allons donc rajouter un DBExtract nommé COUNTRY dans le XMLGram de FormORGANIZATION.

Image non disponible

Nous allons sélectionner tout simplement tous les enregistrements avec les champs COUNTRY_ID et COUNTRY_NAME seulement.

Modifions le XSL pour remplacer le champ text par une DataDropDownList en faisant pointer sur l'enregistrement se trouvant dans l'OutputDoc COUNTRYS/COUNTRY.

Image non disponible

Nous avons maintenant le bon affichage, mais à chaque rafraichissement de la page, les 165 pays de la liste sont extraits de la base de données et ajoutés un par un dans l'OutpuDoc alors que cette liste n'a pas bougé depuis la dernière requête et qu'elle ne risque pas de bouger avant un certain moment... Il est donc ici interessant de mettre cette liste en cache !

Nous allons ajouter une instruction cache nommée CacheCOUNTRY dans notre XMLGram et par couper/coller, insérer l'instruction COUNTRY en tant que sous instruction de CacheCOUNTRY.

Image non disponible

Lors de la première exécution, les 165 pays sont extrait de la base de données pour être ajoutés dans une grappe XML conservée en mémoire puis cette dernière est ajoutée a son tour dans L'OutputDoc. Lors des execution suivantes, seul l'ajout de la grappe XML dans l'OutputDoc sera effectué.

Si le besoin se fait sentir de réinitialiser le cache, il suffit d'introduire dans le Context le paramètre XMLC_ResetCache avec la valeur 1.

Comparaison des temps d'execution

Comment mesurer le bénéfice de l'utilisation de l'instruction Cache ? Pour cela nous allons consulter les statistiques de l'application avant et après ajout de l'instruction Cache. Aprtir de l'action XMLC_Stats nous allons descendre jusqu'au XMLService FormORGANIZATION. Pour plus d'information sur ces écrans de statistiques veuillez lire l'article Statistiques et montée en charge de votre application web XMLRAD.

Sans utilisation de l'instruction Cache, l'instruction COUNTRY prend en moyenne sur ma machine 22ms pour s'exécuter. Ce temps comprend l'ouverture du curseur, la récupération (fetch) des 165 enregistrements et leur ajout dans le document XML.

Image non disponible

Avec l'utilisation de l'instruction Cache, l'instruction CacheCOUNTRY prend moins d'une milliseconde en moyenne, l'instruction COUNTRY n'etant executée qu'une seule fois.

Image non disponible

Sur l'execution de notre action on gagne ici en moyenne 30% ce qui est non négligeable. Et comme on l'a vu dans l'article Statistiques et montée en charge de votre application web XMLRAD, plus les requêtes sont rapides plus on peut mettre d'utilisateurs sur l'application.

Conclusion

Nous avons vu dans cet article comment fonctionne l'instruction Cache et comment l'utiliser pour augmenter les performance de nos applications en mettant en cache certaines extractions de la base de données.

N'hésitez pas à recourrir à l'instruction cache pour améliorer le temps de réponse de vos applications et soulager l'accès à la base de données. Plus vos pages sont calculées rapidement plus vous pourrez mettre d'utilisateurs sur vos serveurs. pour plus d'information sur la montée en charge, voir l'article Statistiques et montée en charge de votre application web XMLRAD.