Kompilierbare Templates
Kompilierbare Templates haben den Vorteil viel schneller Content zu produzieren als interpretierte Templates. Ein Nachteil dieser Templates ist aber die Möglichkeit, sie direkt aus der Textdarstellung (aus der DB) zu nutzen.
Für FreshMarker kommen einige weitere Hürden hinzu.
- Was kann optimiert werden, wenn das Datenmodell nicht typisiert ist.
- Wie kann die Erweiterbarkeit von FreshMarker auch in kompilierten Templates genutzt werden.
Eine erste Validierung der Idee von kompilierbaren Templates könnte die Generierung von Java Klassen Sourcen auf der Basis eines Template Klasse und eines Visitors über den internen Baum des Templates.
Das Resultat könnte beispielhaft folgende Struktur haben (angenommen das Template heißt demo):
public final class DemoTemplate extends AbstractTemplate {
public DemoTemplate() {
super("demo");
}
public void process(Writer writer, Map<String, Object> model) {
processConstantFragment("Hello World!\n");
processLoopDirective1(model.get("liste"));
}
private void processLoopDirective1(Object sequence) {
List<Object> list = evaluateList(sequence);
for (Object item : list) {
processConstantFragment("item: ");
processInterpolation1(item);
processConstantFragment("\n");
}
}
}
Die processConstantFragment könnte eine Methoden der Basisklasse sein und die Aufgaben der ConstantFragment Klassen ersetzen.
Die processLoopDirective1 wird aus einem Template generiert und bildet die Schleifenverarbeitung der List Direktive nach.
Die Fragment Implementierungen zu verwenden scheint nicht angeraten, weil so keine Performanceverbesserung zu erwarten ist. So würde nur die Überführung der Template Texte in eine Template Instanz beschleunigt.