This article beschreibt, wie effiziente DisplayDrivers für Ihre Teile geschrieben werden, so dass teurer Code nur ausgeführt wird, wenn die Form tatsächlich angezeigt wird.Wie effizient mehrere DriverResults von der Methode Display zurückgegeben werden?
protected override DriverResult Display(MyPart part, string displayType, dynamic shapeHelper)
{
// return the shape
return ContentShape("Parts_MyPart",() => {
// do computations here
return shapeHelper.Parts_MyPart();
});
}
Nun möchte Ich mag einen Teil machen, die mehrere DriverResults mit der Combine
Methode gibt, mit jedem DriverResult meist die gleichen Daten enthalten, die aus der Datenbank abgerufen wird. Das Problem ist, ich denke nicht an eine gute Möglichkeit, es effizient zu machen, da Combine
keinen Func-Parameter nimmt.
protected override DriverResult Display(MyPart part, string displayType, dynamic shapeHelper)
{
var data = ... // expensive query specific to the part
return Combined(
ContentShape("Parts_MyPart_A",() => shapeHelper.Parts_MyPart_A(
Data: data
)),
ContentShape("Parts_MyPart_B",() => shapeHelper.Parts_MyPart_B(
Data: data
)),
ContentShape("Pars_MyPart_C", ...
);
}
Kann ich das gleiche Ergebnis erzielen, so dass die Abfrage nicht ausgeführt wird, wenn nichts angezeigt wird und nur einmal ausgeführt, wenn mehrere Formen dargestellt?
Ich möchte dies tun, damit ich die gleichen Daten auf einem ContentItem-Detail in verschiedenen Zonen mit unterschiedlichen Markup und Styling anzeigen kann. Ein alternativer Ansatz könnte darin bestehen, eine Form zurückzugeben, die wiederum andere Formen in andere Bereiche verschiebt, aber dann würde ich die Fähigkeit verlieren, die Positionierung einzeln zu steuern.
Und halten Sie diese Treiber effizient! http://arkleseizure.net/dont-let-the-designer-ruin-your-drivers-performance – Hazza
Sie könnten ein Backing-Feld verwenden, erstellen Sie eine Methode, die überprüft, ob das Backing-Feld nicht null ist, dann gibt es zurück, sonst es löst die teure Abfrage aus und setzt sie auf das Backing-Feld – devqon