Optimieren der Leistung von Canvas-Apps in Power Apps

Microsoft arbeitet beständig daran, die Leistung aller Apps zu verbessern, die auf der Power Apps-Plattform ausgeführt werden. Sie können aber die Best Practices in diesem Thema befolgen, um die Leistung der von Ihnen erstellten Apps noch weiter zu steigern.

Wenn ein Benutzer eine App öffnet, durchläuft sie folgende Ausführungsphasen, bevor eine Benutzeroberfläche angezeigt wird:

  1. Authentifizierung des Benutzers: Der Benutzer wird, sofern er diese App zuvor noch nie geöffnet hatte, aufgefordert, sich mit den Anmeldeinformationen anzumelden, die für die Verbindungen der App erforderlich sind. Wenn dieser Benutzer die App erneut öffnet, wird er möglicherweise erneut zur Angabe dieser Informationen aufgefordert, je nach Sicherheitsrichtlinien der Organisation.
  2. Abrufen der Metadaten: Die Metadaten werden abgerufen, z. B. die Version der Power Apps-Plattform, auf der die App ausgeführt wird, und die Quellen, aus denen Daten abgerufen werden müssen.
  3. Initialisieren der App: Aufgaben, die in der OnStart-Eigenschaft angegeben sind, werden ausgeführt.
  4. Rendern der Bildschirme: Rendert den ersten Bildschirm mit Steuerelementen, den die App mit Daten gefüllt hat. Wenn der Benutzer weitere Bildschirme öffnet, rendert die App diese mithilfe des gleichen Prozesses.

Einschränken von Datenverbindungen

Stellen Sie in ein und derselben App nicht mehr als 30 Verbindungen mit Datenquellen her. Apps fordern neue Benutzer auf, sich bei jedem Connector anzumelden, daher erhöht jeder Connector die Zeitspanne, die die App zum Starten benötigt. Während der Ausführung einer App erfordert jeder Connector CPU-Ressourcen, Arbeitsspeicher und Netzwerkbandbreite, wenn die App Daten aus einer Quelle anfordert.

Sie können die Leistung Ihrer App schnell messen, indem Sie während der Ausführung der App die Entwicklertools in Microsoft Edge oder Google Chrome aktivieren. Ihre App benötigt wahrscheinlich mehr als 15 Sekunden für die Datenrückgabe, wenn sie häufig Daten aus mehr als 30 Datenquellen wie Common Data Service, Azure SQL, SharePoint und Excel on OneDrive anfordert.

Beschränken der Anzahl von Steuerelementen

Fügen Sie einer App nicht mehr als 500 Steuerelemente hinzu. Power Apps generiert ein HTML-DOM-Element, um jedes Steuerelement zu rendern. Je mehr Steuerelemente Sie hinzufügen, desto mehr Zeit benötigt Power Apps zum Generieren.

Sie können in einigen Fällen das gleiche Ergebnis erzielen und für einen schnelleren App-Start sorgen, wenn Sie anstelle von einzelnen Steuerelementen einen Katalog verwenden. Darüber hinaus sollten Sie die Anzahl von Steuerelementtypen im gleichen Bildschirm reduzieren. Einige Steuerelemente (z. B. PDF-Viewer, Datentabellen und Kombinationsfelder) benötigen umfassende Ausführungsskripts, und es dauert länger, sie zu rendern.

Optimieren der OnStart-Funktion

Verwenden Sie die ClearCollect-Funktion, um Daten lokal zwischenzuspeichern, wenn sie während der Benutzersitzung nicht geändert werden. Verwenden Sie außerdem die Concurrent-Funktion, um Datenquellen gleichzeitig zu laden.

Wie in diesem Referenzthema veranschaulicht, können Sie Concurrent verwenden, um die Zeitspanne zu halbieren, die eine App zum Laden von Daten benötigt.

Ohne die Concurrent-Funktion lädt diese Formel jede der vier Tabellen einzeln:

ClearCollect( Product, '[SalesLT].[Product]' );
ClearCollect( Customer, '[SalesLT].[Customer]' );
ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )

Sie können dieses Verhalten in den Entwicklertools Ihres Browsers überprüfen:

ClearCollect, serielle Ausführung

Sie können diese Formel in die Concurrent-Funktion einschließen, um die gesamte Ausführungsdauer des Vorgangs zu reduzieren:

Concurrent( 
    ClearCollect( Product, '[SalesLT].[Product]' ),
    ClearCollect( Customer, '[SalesLT].[Customer]' ),
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ))

Mit dieser Änderung ruft die App die Tabellen parallel ab:

ClearCollect, parallele Ausführung

Zwischenspeichern von Suchdaten

Verwenden Sie die Set-Funktion, um Daten aus Nachschlagetabellen lokal zwischenzuspeichern und so ein wiederholtes Abrufen von Daten aus der Quelle zu vermeiden. Diese Technik optimiert die Leistung, wenn sich die Daten während einer Sitzung voraussichtlich nicht ändern. Wie in diesem Beispiel werden die Daten einmal aus der Quelle abgerufen. Danach wird lokal auf die Daten verwiesen, bis der Benutzer die App schließt.

Set(CustomerOrder, Lookup(Order, id = “123-45-6789”));
Set(CustomerName, CustomerOrder.Name);
Set(CustomerAddress, CustomerOrder.Address);
Set(CustomerEmail, CustomerOrder.Email);
Set(CustomerPhone, CustomerOrder.Phone);

Kontaktinformationen ändern sich nicht häufig, und das Gleiche gilt für Standardwerte und Benutzerinformationen. Sie können diese Technik also im Allgemeinen auch mit den Funktionen Defaults und User verwenden.

Vermeiden der Abhängigkeit von Steuerelementen zwischen Bildschirmen

Um die Leistung zu verbessern, werden die Bildschirme einer App nur bei Bedarf in den Speicher geladen. Diese Optimierung kann behindert werden, wenn beispielsweise Bildschirm 1 geladen wird und eine seiner Formeln eine Eigenschaft eines Steuerelements von Bildschirm 2 verwendet. Jetzt muss Bildschirm 2 geladen werden, um die Abhängigkeit zu erfüllen, bevor Bildschirm 1 angezeigt werden kann. Stellen Sie sich vor, Bildschirm 2 hat eine Abhängigkeit von Bildschirm 3, die eine andere Abhängigkeit von Bildschirm 4 hat, und so weiter. Diese Abhängigkeitskette kann dazu führen, dass viele Bildschirme geladen werden.

Vermeiden Sie aus diesem Grund Formelabhängigkeiten zwischen Bildschirmen. In einigen Fällen können Sie eine globale Variable oder Sammlung verwenden, um Informationen zwischen Bildschirmen auszutauschen.

Es gibt eine Ausnahme. Stellen Sie sich im vorherigen Beispiel vor, dass Bildschirm 1 nur durch Navigieren von Bildschirm 2 angezeigt werden kann. Dann wäre Bildschirm 2 bereits in den Speicher geladen worden, als Bildschirm 1 erst geladen werden sollte. Es ist keine zusätzliche Arbeit erforderlich, um die Abhängigkeit für Bildschirm 2 zu erfüllen, und daher gibt es keine Auswirkungen auf die Leistung.

Verwenden der Delegierung

Verwenden Sie nach Möglichkeit Funktionen, die die Datenverarbeitung an die Datenquelle delegieren, anstatt Daten zur Verarbeitung auf das lokale Gerät abzurufen. Wenn eine App Daten lokal verarbeiten muss, benötigt dieser Vorgang wesentlich mehr Verarbeitungsleistung, Arbeitsspeicher und Netzwerkbandbreite – insbesondere bei großen Datasets.

Wie diese Liste zeigt, unterstützen verschiedene Datenquellen die Delegierung aus verschiedenen Funktionen:

Verwenden der Delegierung

SharePoint-Listen unterstützen z. B. die Delegierung aus der Filter-Funktion, aber nicht aus der Search-Funktion. Daher sollten Sie Filter anstelle von Search verwenden, um Elemente in einem Katalog zu suchen, wenn die SharePoint-Liste mehr als 500 Elemente enthält. Weitere Tipps finden Sie unter Arbeiten mit großen SharePoint-Listen in Power Apps (Blogbeitrag).

Verwenden des verzögerten Ladens

Aktivieren Sie das experimentelle Feature für das verzögerte Laden, wenn Ihre App über mehr als 10 Bildschirme, keine Regeln und viele Steuerelemente verfügt, die sich auf mehreren Bildschirmen befinden und direkt an die Datenquelle gebunden sind. Wenn Sie diese Art App erstellen und dieses Feature nicht aktivieren, könnte die App-Leistung beeinträchtigt werden, weil die Steuerelemente in allen Bildschirmen aufgefüllt werden müssen – auch in Bildschirmen, die gar nicht geöffnet sind. Darüber hinaus müssen alle Bildschirme der App aktualisiert werden, sobald sich die Datenquelle ändert, weil beispielsweise der Benutzer einen Datensatz hinzufügt.

Arbeiten mit großen Datasets

Verwenden Sie Datenquellen und Formeln, die delegiert werden können, um die Leistungsfähigkeit Ihrer Apps zu sichern, dafür zu sorgen, dass Benutzer auf alle benötigten Informationen zugreifen können, und die maximale Anzahl von 2.000 Datenzeilen für nicht delegierbare Abfragen nicht zu überschreiten. Bei Datensatzspalten, in denen Benutzer Daten suchen, filtern oder sortieren können, sollten die Indizes gemäß den Beschreibungen unter SQL Server und SharePoint entworfen werden.

Regelmäßiges erneutes Veröffentlichen von Apps

Veröffentlichen Sie Ihre Apps neu, um Leistungssteigerungen zu erzielen und von weiteren Features der Power Apps-Plattform zu profitieren. Informationen dazu finden Sie im Blogbeitrag.

Vermeiden, dieselbe Formel an mehreren Stellen zu wiederholen

Wenn mehrere Eigenschaften dieselbe Formel ausführen (insbesondere wenn sie komplex sind), sollten Sie sie einmal festlegen und dann in den folgenden auf die Ausgabe der ersten Eigenschaft verweisen. Legen Sie zum Beispiel die DisplayMode-Eigenschaft der Steuerelemente A, B, C, D und E nicht auf dieselbe komplexe Formel fest. Legen Sie stattdessen die DisplayMode-Eigenschaft von A auf die komplexe Formel fest, die DisplayMode-Eigenschaft von B auf das Ergebnis der DisplayMode-Eigenschaft von A und so weiter für C, D und E.

Aktivieren von DelayOutput für alle Texteingabesteuerelemente

Wenn Sie mehrere Formeln oder Regeln haben, die auf den Wert eines Text input-Steuerelements verweisen, legen Sie die DelayedOutput-Eigenschaft dieses Steuerelements auf „true“ fest. Die Text-Eigenschaft dieses Steuerelements wird erst aktualisiert, nachdem die kurz hintereinander eingegebenen Tastenanschläge beendet wurden. Die Formeln oder Regeln werden nicht so oft ausgeführt und die App-Leistung wird verbessert.

Vermeiden der Verwendung von Form.Updates in Regeln und Formeln

Wenn Sie auf einen Benutzereingabewert in einer Regel oder Formel verweisen, indem Sie die Variable Form.Updates verwenden, durchläuft es alle Datenkarten des Formulars und erstellt jedes Mal einen Datensatz. Um Ihre App effizienter zu gestalten, verweisen Sie auf den Wert direkt von der Datenkarte oder dem Steuerelementwert.

Nächste Schritte

Überprüfen Sie die Kodierungsstandards zur Maximierung der App-Leistung und zur einfacheren Wartung von Apps.