Una optimización común es crear stacks de ficheros para evitar realizar demasiadas peticiones al servidor para cargar nuestra web y Tapestry nos proporciona el mecanismo para hacerlo.
En este ejemplo definiremos una Stack propia e independiente de la stack core de Tapestry (contribuir a la Stack core para incluir librerías Js puede hacer que la carga e inicialización de la web sea más lenta).
En nuestro AppModule debemos incluir el siguiente código:
public static void contributeJavaScriptStackSource(final MappedConfiguration<String, JavaScriptStack> configuration) { configuration.addInstance("libraries-stack", MyJavascriptStack.class); }}
En cualquiera de nuestras páginas podremos importar directamente la stack o, al importar cualquiera de sus Js individuales, automáticamente se importará la stack.
package es.carlosmontero.webapp.t5devutil.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.tapestry5.Asset; import org.apache.tapestry5.ioc.services.ThreadLocale; import org.apache.tapestry5.services.AssetSource; import org.apache.tapestry5.services.javascript.JavaScriptAggregationStrategy; import org.apache.tapestry5.services.javascript.JavaScriptStack; import org.apache.tapestry5.services.javascript.StylesheetLink; public class MyJavascriptStack implements JavaScriptStack { private final List<Asset> js; private final List<String> modules; public MyJavascriptStack(final AssetSource assetSource, final ThreadLocale threadLocale) { js = new ArrayList<Asset>(); /** * Project libraries */ js.add(assetSource.getClasspathAsset("/META-INF/assets/js/js-stack-1.js")); js.add(assetSource.getClasspathAsset("/META-INF/assets/js/js-stack-2.js")); modules = new ArrayList<String>(); /** * Project modules */ modules.add("module-stack-1"); } @Override public List<String> getStacks() { return Collections.EMPTY_LIST; } @Override public List<Asset> getJavaScriptLibraries() { return js; } @Override public List<StylesheetLink> getStylesheets() { return Collections.EMPTY_LIST; } @Override public List<String> getModules() { return modules; } @Override public JavaScriptAggregationStrategy getJavaScriptAggregationStrategy() { return JavaScriptAggregationStrategy.COMBINE_AND_MINIMIZE; } @Override public String getInitialization() { return ""; } }