Flex utilise une cache en mémoire pour le traitement des requêtes des pages MXML. Lors de la première invocation d'une page MXML, le compilateur crée un fichier SWF et l'enregistre dans le cache de Flex. Flex crée et cache également une page HTML wrapper et répond aux requêtes suivantes à partir de ce cache. La Figure 1 illustre le flux du trafic.
Figure 1. Mise en cache des requêtes de pages MXML
Flex cache également les fichiers dépendants tels que les fichiers SWC, MXML et ActionScript. Flex conserve une référence de tous les fichiers dépendants, tels que les feuilles de styles CSS, les images utilisées dans la balise <mx:Image> et les fichiers ActionScript inclus dans la balise <mx:Script>, et les enregistre dans le fichier /WEB-INF/flex/cache.dep. Flex recompile le fichier MXML si un de ces fichiers dépendants a changé.
Les paramètres de cache de Flex sont configurés dans la section <cache>...</cache> du fichier de configuration flex-config.xml. Par défaut, Flex active la mise en cache avec l'entrée <cache-mxml>true</cache-mxml>. Si vous donnez à cette entrée la valeur false, toutes les requêtes d'un fichier MXML forcent à la recompilation du document MXML. L'entrée <content-size>500</content-size> du fichier flex-config.xml définit la taille maximum du cache, qui est ici de 500 entrées. La taille de valeur des contenus n'est pas définie par le nombre total de fichiers MXML mais plutôt par le nombre total d'entrées en cache. Par exemple, un même fichier MXML enregistre deux entrées dans le cache : une pour le conteneur HTML et une pour le fichier SWF. Alors que le paramètre par défaut de 500 est plus que suffisant dans la plupart des cas, il peut arriver que certaines applications d'entreprise comprennent un très grand nombre de documents MXML. Flex crée des entrées de cache supplémentaires pour les différentes paires d'URL (par exemple, page.mxml?accessible=true). La définition de accessible=true dans l'URL entraîne la création d'un nouveau fichier SWF unique et d'un conteneur HTML qui sont ajoutés au cache. L'augmentation de cette valeur n'entraîne pas une utilisation excessive de mémoire étant donné que la plupart des conteneurs HTML ne font que quelques kilo-octets et que la plupart des fichiers SWF Flex font de 100 à 150 Ko.
Lorsque vous utilisez la bibliothèque de balises JSP pour placer du code MXML dans une page JSP ou CFML, Flex utilise un cache distinct pour les fragments de code MXML. Flex définit ce cache à l'aide de l'entrée <mxml-size>, avec une valeur par défaut de 500. L'exemple suivant est un fragment de code pour une page JSP :
<mx:Application> <mx:Label text="bonjour"/> </mx:Application>
Flex cache ce fragment de code dans le cache source défini par l'entrée <mxml-size>. Le fichier SWF résultant et le conteneur HTML produit par la compilation de la source sont mis en cache, dans le cache de contenus défini dans le paramètre <content-size>. Une nouvelle entrée est placée dans le cache source et Flex compile un nouveau fichier SWF lorsque le fragment source change.
<mm:mxml> <mx:Application> <mx:Label text="bonjour" /> </mx:Application> </mm:mxml>
Lorsque Flex atteint la taille limite, il se débarrasse du fichier le plus ancien. Flex 1.0 ne fournit aucune façon de voir le nombre d'entrées en cache et ne permet pas de purger le cache en cours d'exécution du serveur. Comme vous pourrez le constater dans la section suivante, il ne s'agit d'un problème que dans le cas où le serveur est exécuté avec production-mode=true. Pendant le développement, le contrôleur de fichiers surveille tous les fichiers dépendants définis dans /WEB-INF/flex/cache.dep et, en cas de changement d'un de ces fichiers, Flex recompile le fichier MXML et actualise le cache. Pour plus d'informations sur la mise en cache dans Flex, consultez la section Configuration de la mise en cache* dans la documentation consacrée au développement d'applications Flex.