A87D320B838E48D8A2E9D2AEC5AEC1E5
  • Thomas Pollinger
  • 05.08.2019
  • DE

RenderTags: Elements.GetElement vs. GetElementByName

Um beim Template Rendering auf die Elemente einer Seite zugreifen zu können. Bietet der Management Server zwei Möglichkeiten an, welche jedoch ja nach Einsatzgebiet sich unterschiedliche Auswirkungen haben. Dies zeigt sich vor allem bei der Performance und beim Caching. Aus diesem Grund möchte ich in diesem Artikel, ergänzend zum Artikel von Oliver Klein RenderTags: Content Klassen-Optimierung durch Caching, die Unterschiede und Einsatzmöglichkeiten beschreiben.

 

Beispiele

Es gibt zwei Möglichkeiten um auf die Inhalts- oder Struktur-Elemente eines Seiten-Objekts vom Typ Page zuzugreifen.
 

Variante A:

Die erste Variante nutzt dazu die Eigenschaft Elements des Objekt Page und zusätzlich weitere Methoden von der Collection PageElementList.

Syntax:

objectPage.Elements.GetElement(String:eltName).GetHtml()

Beispiel:

<%!! Context:CurrentPage.Elements.GetElement(String:eltName).GetHtml() !!%>
<%!! Context:Pages.GetPage(Guid:D72F8CC0B2494BD39A74C52912E6B54E).Elements.GetElement(String:textCopyright).GetHtml() !!%>

Hinweise:

Wenn man diese Methode verwendet, lädt man alle Elemente einer Seite, selbst wenn nur das gewünschte Element zurückgegeben wird. Diese Methode kann daher die Performance beeinträchtigen. Man sollte sich vergewissern ob das Lesen aller Elementwerte notwendig ist. Wenn nur wenige Elemente der vollständigen Liste aller Elemente des Seitenobjekts tatsächlich verwendet werden, verwendet man stattdessen die Methode GetElementByName.
 

Variante B:

Daher kommen wir schon direkt zur zweiten Variante, welche sich die Methode GetElementByName() von dem Objekt Page nutzt.

Syntax:

objectPage.GetElementByName(String:eltName).GetHtml()

Beispiele:

<%!! Context:CurrentPage.GetElementByName(String:textCopyright).GetHtml() !!%>
<%!! Context:Pages.GetPage(Guid:D72F8CC0B2494BD39A74C52912E6B54E).GetElementByName(String:textCopyright).GetHtml() !!%>

Hinweise:

Man verwendet diese Abfrage, um nur die Seitenelementwerte zu lesen, die normalerweise nicht geändert werden. Wenn man alle Elemente auf einer Seite oder die meisten Elemente abrufen möchten, verwendet man stattdessen die Methode GetElement. Diese Methode kann jedoch die Performanz beeinträchtigen.

 

Erläuterung

Nun kommen wir dazu, was nutzt man wie und warum? ;) Dazu verweise ich nochmals auf den Artikel RenderTags: Content Klassen-Optimierung durch Caching von Oliver Klein, welcher die Resulte sehr gut wiedergibt.

Um eine optimale Performance gewährleisten zu können, sollte man sich immer Gedanken über die Anzahl der benötigten Elemente im entsprechenden Kontext machen. Denn wie schon in der Online-Hilfe in den entsprechenden Hinweisen beschrieben wird. Ist es ein großer Unterschied, ob man alle Elemente, einen Teil oder nur ein Element zur Laufzeit benötigt.

Benötigt man z.B. innerhalb eines Navigation Manager Templates nur den Wert eines einzigen Elements, sollte man die Methode GetElementByName() zum Einsatz bringen. Benötigt man jedoch mehrfach unterschiedlichen Elemente, bietet es sich an alle Elemente - also die Collection PageElementList - mit der Eigenschaft Elements am Anfang des Templates in einen Store zu packen.

Syntax:

objectPage.Elements
objectIndex.objectPage.Elements

Beispiele:

<%!! Store:Set(String:pageElements, Context:CurrentPage.Elements) !!%>
<%!! Store:Set(String:pageElements, Context:CurrentIndex.Page.Elements) !!%>

Anschließend greift man nur noch auf den Inhalt des Stores zu, was zu einem schnellen Template Rendering und damit zu kürzeren Laufzeiten führt.

Syntax:

objectStore.Get(String:key).Elements.GetElement(String:eltName).GetHtml()
objectStore.Get(String:key).GetElementByName(String:eltName).GetHtml()

Beispiele:

<%!! Store:Get(String:pageElements).Elements.GetElement(String:textCopyright).GetHtml() !!%>
<%!! Store:Get(String:pageElements).GetElementByName(String:textCopyright).GetHtml() !!%>

 

Siehe auch


Über den Autor:
Thomas Pollinger

... ist Senior Site Reliability Engineer bei der Vodafone GmbH in Düsseldorf. Seit dem Jahr 2007 betreut er zusammen mit seinen Kollegen die OpenText- (vormals RedDot-) Plattform Web Site Management für die deutsche Konzernzentrale.

Er entwickelt Erweiterungen in Form von Plug-Ins und PowerShell Skripten. Seit den Anfängen in 2001 (RedDot CMS 4.0) kennt er sich speziell mit der Arbeitweise und den Funktionen des Management Server aus.