Almacenamiento en memoria caché e invalidación de widget de Commerce Composer

Los widgets a nivel de sitio y nivel de tienda pueden almacenarse en memoria caché para el rendimiento de tienda mejorado.

Los widgets se almacenan en memoria caché de una de dos formas:
  • Los widgets pueden almacenarse en memoria caché independientemente como fragmento. El fragmento almacenado en memoria caché se introduce en la página solicitada. Este tipo de almacenamiento en memoria caché permite la reutilización de los widgets. Por ejemplo, la cabecera y el pie de página se almacenan en la memoria caché por separado y se introducen en cada solicitud de página. Estos fragmentos se pueden invalidar independientemente sin que afecte a la entrada de memoria caché de la página padre.
  • Los widgets pueden almacenarse en memoria caché como parte de (consumidos por ) la página padre. Una página solicitada puede puede servirse totalmente almacenada en memoria caché. Si se modifica el contenido del widget de alguna manera, la página almacenada en memoria caché debe ser invalidada por completo.

Cada widget tiene una entrada en cachespec.xml. Es dentro de este archivo donde se establecen los parámetros almacenados en memoria caché. Sin embargo no todos los widgets se almacenan en memoria caché. Si un widget se almacena en memoria caché y cómo se almacena dependerá principalmente de su función:

Contenido del widget Ejemplos de widgets Entradas necesarias de cachespec.xml. Razonamiento
Siempre dinámico Widget de Disponibilidad de inventario

Widget de Descuentos

Las propiedades de do-not-cache y do-not-consume se establecen en true Estos widgets no se han almacenado en memoria caché porque su contenido se genera en tiempo real basado en interacciones con el comprador. El contenido siempre cambia y nunca es el mismo en distintos compradores.
A veces dinámico Widget de Recomendación de contenido

Widget de Recomendación de categorías

Widget de Zona de e-Marketing
Las propiedades de do-not-cache y do-not-consume se establecen en true

Se añade el siguiente metaDataGenerator:

<metadatagenerator>
com.ibm.commerce.marketing.cache.EMarketingSpotMetaDataGenerator
</metadatagenerator>
Los widgets de marketing pueden incluir contenido dinámico o estático personalizado para distintos compradores. Por lo tanto, se pueden consumir o almacenar en memoria caché de forma independiente en función de su comportamiento individual.

A pesar de que es necesario que las propiedades do-not-cache y do-not-consume se establezcan en true, pueden ignorarse. El generador de metadatos incluido decide si se deben almacenar en memoria caché los widgets de marketing en función de si el contenido se determina como estático o dinámico.

Para obtener más información, consulte Visión general del almacenamiento en memoria caché de JSP de Zonas de e-Marketing basándose en el comportamiento de la actividad.

Estático / consumible Widget de Cabecera

Widget de Descripción breve

Las propiedades de do-not-cache y do-not-consume se establecen en true

Se añade el siguiente ID de dependencia especial:

<dependency-id>ignoreDoNotConsume</dependency-id>
Las páginas padre pueden consumir widgets con contenido estático. Cuando se consume un widget, los ID de dependencia de widgets deben añadirse a la entrada de memoria caché de la página padre. Estos ID de dependencia causan la invalidación de la página padre almacenada en la memoria caché siempre que se modifique el contenido del widget.
Para que se alcance este proceso, cualquier widget consumible debe contener una etiqueta especial dentro de su JSP:
<wcpgl:pageLayoutWidgetCache/>
Cuando se ejecuta el JSP del widget, la clase de manejador de códigos asociada comprueba la presencia del ID de dependencia de ignoreDoNotConsume. Si está presente, el atributo do-not-consume se restablece a false, lo que permite que la página padre consuma el widget. También añade estos valores de ID de dependencia del widget a los de la página padre.
A continuación se muestra una entrada de memoria caché de ejemplo para el widget de cabecera estático. Consulte cachespec.xml para obtener más detalles y ejemplos.
<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>