Mise en cache et invalidation des widgets Commerce Composer
Les widgets de niveau site et magasin peuvent être mis en cache pour améliorer les performances du magasin.
- Les widgets peuvent être mis en cache indépendamment sous forme de fragment. Ce fragment mis en cache est injecté dans la page demandée. Ce type de mise en cache permet la réutilisation des widgets. Par exemple, l'en-tête et le pied de page sont mis en cache séparément et injectés dans chaque requête de page. Ces fragments peuvent être invalidés indépendamment sans affecter l'entrée du cache de page parent.
- Les widgets peuvent être mis en cache dans le cadre de ("consommés par") la page parent. Une page demandée peut être entièrement mise en cache. Si le contenu du widget est modifié de quelque façon que ce soit, la page mise en cache doit être complètement invalidée.
Chaque widget a une entrée dans cachespec.xml. Elle se trouve dans ce fichier, où les paramètres de mise en cache sont définis. Cependant, tous les widgets ne sont pas mis en cache. La mise en cache d'un widget et la méthode dépend principalement de sa fonction :
| Contenu d'un widget | Exemples de widgets | Entrées cachespec.xml requises | Raisonnement |
|---|---|---|---|
| Toujours dynamique | Widget Disponibilité des stocks | Les propriétés do-not-cache et do-not-consume sont définies sur true | Ces widgets ne sont pas mis en cache car leur contenu est généré en temps réel en fonction des interactions avec le client. Le contenu est en constante évolution, et n'est jamais le même entre les différents clients. |
| Parfois dynamique | Widget Recommandation de contenu Widget Recommandation de catégorie Widget Emplacement e-Marketing |
Les propriétés do-not-cache et do-not-consume sont définies sur true. Le metaDataGenerator suivant est ajouté : |
Les widgets marketing peuvent contenir du contenu statique ou du contenu dynamique personnalisé pour différents clients. Par conséquent, ils peuvent être consommés ou mis en cache indépendamment en fonction de leur comportement individuel. Bien que les propriétés do-not-cache et do-not-consume doivent être définies sur true, elles peuvent être ignorées. Le générateur de métadonnées inclus décide de mettre en cache les widgets marketing ou non selon si le contenu est déterminé comme étant statique ou dynamique. Pour plus d'informations, voir Présentation de la mise en cache JSP des emplacement e-Marketing à partir du comportement d'une activité. |
| Statique / consommable | Widget En-tête | Les propriétés do-not-cache et do-not-consument sont définies sur true. L'ID de dépendance spécial suivant est ajouté : |
Les widgets avec du contenu statique peuvent être consommés par leurs pages parent. Lorsqu'un widget est consommé, les ID de dépendance des widgets doivent être ajoutés à l'entrée du cache de page parent. Ces ID de dépendance entraînent l'invalidation de la page parent mise en cache chaque fois que le contenu du widget est modifié. Pour que ce processus soit réalisé, tout widget consommable doit contenir une balise spéciale dans son JSP : Lorsque le JSP de widget s'exécute, la classe du gestionnaire de balises associée vérifie la présence de l'ID de dépendance ignoreDoNotConsume. S'il est présent, l'attribut do-not-consume a été réinitialisé sur false, permettant ainsi au widget d'être consommé par la page parent. Il ajoute également les valeurs d'ID de dépendance de ce widget à celles de la page parent. |
<cache-entry>
<class>servlet</class>
<name>/Widgets_801/com.ibm.commerce.store.widgets.Heading/Heading.jsp</name>
<property name="save-attributes">false</property>
<property name="consume-subfragments">true</property>
<property name="do-not-consume">true</property> <!-- will be reset to false, since ignoreDoNotConsume dependency-id is present -->
<property name="do-not-cache">true</property>
<cache-id>
<component id="langId" type="parameter">
<required>true</required>
</component>
</cache-id>
<dependency-id>categoryId
<component id="categoryId" type="parameter">
<required>true</required>
</component>
</dependency-id>
<dependency-id>productId
<component id="productId" type="parameter">
<required>true</required>
</component>
</dependency-id>
<dependency-id>ignoreDoNotConsume</dependency-id>
</cache-entry>