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 "";
}
}