Zoptymalizuj ładowanie aplikacji lub strony, aby uzyskać najwyższą wydajność

Jednym z kluczowych czynników kształtujących postrzeganie aplikacji przez użytkownika jest to, jak szybko się ona otwiera i staje się funkcjonalna. Dlatego nadanie priorytetu temu celowi ma kluczowe znaczenie przy tworzeniu wydajnej aplikacji. Aby osiągnąć optymalną wydajność aplikacji, należy zwrócić uwagę na trzy główne obszary:

  1. Szybko załaduj dane
  2. Efektywne obliczenia
  3. Minimalizacja wymaganych zasobów

Każdy z tych obszarów ma kilka wspólnych anty-wzorców.

Szybko załaduj dane

Postępuj zgodnie z tymi wskazówkami, aby uzyskać aplikacje do szybkiego ładowania danych.

Unikaj bezpośredniego wypełniania kolekcji dużymi ilościami danych

Czasami autorzy używają funkcji ClearCollect() do kopiowania danych z serwera do kolekcji w swojej aplikacji. Ta praktyka stanowi obejście ograniczeń delegowania w źródle lub planowania używania kolekcji w aplikacji do innych celów. Korzystanie z ClearCollect() może potencjalnie zwiększyć szybkość aplikacji, gdy kolekcja będzie później wykorzystywana. Ważne jest jednak, aby zachować ostrożność podczas jego wdrażania. Korzystanie z ClearCollect w ten sposób może prowadzić do wolniejszego ładowania aplikacji lub wolniejszego poruszania się między stronami. Funkcja ClearCollect() musi zostać zakończona, zanim będzie można wyświetlić dane w galerii lub tabeli. Ten krok może zająć dużo czasu, jeśli jest dużo danych lub jeśli zastosujesz tę metodę w przypadku zbyt wielu źródeł danych. Kolekcje najlepiej sprawdzają się w sytuacjach, gdy dane są małe i trzeba wykonać wiele obliczeń na kolekcji. Dobrym wykorzystaniem kolekcji jest na przykład koszyk zamówień online. Klient może kilkakrotnie aktualizować i usuwać pozycje przed podjęciem decyzji o realizacji zamówienia. Dodatkowo możesz rozszerzyć kolekcję o więcej elementów danych, takich jak potencjalne rabaty, najważniejsze informacje itp. Dostęp do danych „tylko do odczytu” powinien być rodzimie uzyskiwany — bez umieszczania ich w kolekcji.

Rozważ unikanie wywołania Power Automate, aby zapełnić kolekcję

To wydanie stanowi niewielką odmianę poprzedniej części. Czasami autorzy również korzystają Power Automate, aby zapełnić swoją kolekcję Power Apps. Utworzenie wystąpienia Power Automate kosztuje około 0,6 sekundy. Power Automate musi być uruchamiany niezależnie przy każdym wywołaniu. Musi przydzielać pamięć, znajdować się w odpowiednich komponentach i być gotowy do działania. Podobnie jak w przypadku powyższej porady, jedno lub dwa wywołania do Power Automate może nie stanowić problemu w zależności od aplikacji. Jednak niemal powszechnie najgorzej działające aplikacje nadużywają tego podejścia. Koszt wydajności może szybko się sumować i zniszczyć wydajność Twojej aplikacji.

Unikaj używania funkcji SaveData() i LoadData() w pełnym scenariuszu offline

Niektórzy autorzy używają ClearCollect(), a następnie SaveData() do przechowywania danych do ogólnego użytku w trybie offline. Możesz użyć SaveData(), aby zapisać kolekcję na swoim urządzeniu, i LoadData(), aby załadować ją, gdy jesteś offline. Jednak to podejście nie jest zalecane w przypadkach, gdy istnieje duża ilość danych lub dane są złożone. Spowalnia to działanie aplikacji, ponieważ musi poczekać na zakończenie funkcji ClearCollect(), zanim będzie mogła wyświetlić dane. Należy używać funkcji SaveData() i LoadData() tylko w przypadku małych i prostych scenariuszy danych, takich jak preferencje i krótkie listy. Lepszym sposobem pracy z dużymi ilościami danych offline jest użycie funkcji offline Power Apps, z którą współpracuje Dataverse. Ta funkcja pozwala efektywniej obsługiwać większe i bardziej złożone dane.

Używanie opcji Jawny wybór kolumny

Jawny wybór kolumn jest domyślnie włączony. Jednak niektórzy autorzy wyłączają tę funkcję. Problem polega na tym, że po włączeniu opcji jawnego wyboru kolumn (ECS) kolumny czasami nie są pobierane ze źródła danych, jeśli dane są najpierw pobierane do kolekcji. Ponieważ niektóre tabele mogą mieć wiele kolumn, ECS automatycznie oblicza, które kolumny należy pobrać, na podstawie ich użycia w kontrolkach (na przykład galeriach i formularzach). Ponieważ niektóre tabele mogą mieć wiele kolumn, zmniejszenie rozmiaru pobieranego pliku może przyspieszyć wydajność. Niektóre tabele mogą mieć sto kolumn lub więcej. Jeśli Twoja aplikacja potrzebuje tylko 10 kolumn i ściągniesz wszystkie kolumny ze 100-kolumnowej tabeli, pobierzesz dziesięć razy więcej danych, niż faktycznie potrzebujesz.

Większość problemów pojawia się podczas wprowadzania danych do kolekcji. Jeśli kolumna w kontrolce wyraźnie odwołuje się do kolumny, wówczas ECS działa dobrze. I ECS generalnie działa w przypadku kolekcji. Jednak pochodzenie kolumn jest czasami tracone, gdy dane przechodzą przez kolekcje i zmienne. I tak Power Apps może stracić kontrolę nad kolumną, którą powinien pobrać. Aby rozwiązać ten problem, możesz wymusić w Power Apps „zapamiętanie” kolumny za pomocą funkcji ShowColumns. Na przykład:

    ClearCollect(
        MyColTable, 
        ShowColumns(Filter(BankAccounts, AcountNo = 32),
        "Col1", 
        "Col2", 
        "Col3")
    );

Gdzie Col1, Col2 i Col3 to kolumny, które mają zostać pobrane ze źródeł danych (na przykład źródła danych Account).

Alternatywnie możesz dodać do formularza ukrytą kontrolkę odwołującą się do kolumny. Zmusza to Power Apps do „zapamiętania” kolumny.

Szybkie obliczenia

Szybkie (lub wydajne) obliczenia są celem samym w sobie. Aby uzyskać więcej informacji, zobacz Szybkie (wydajne) obliczenia. Istnieją jednak pewne typowe anty-wzorce, które mogą również wpływać na obciążenie aplikacji, dlatego omawiamy je tutaj. Poniżej znajduje się lista optymalizacji, które należy wziąć pod uwagę i które mogą mieć wpływ na uruchamianie aplikacji lub nawigację po stronie.

Używanie App.Formulas

Historycznie rzecz biorąc, wielu autorów umieszczało dużą liczbę obliczeń w OnStart. Umieszczenie wyrażenia w OnStart wymusza Power Apps uruchomienie tego wyrażenia dokładnie podczas uruchamiania aplikacji i przed wszystkim innym. Jednak wraz z wprowadzeniem App.Formulas możesz pozwolić Power Apps decydować, kiedy uruchomić wyrażenie. Power Apps może uruchomić formułę „Dokładnie na czas”, zanim będzie potrzebna. Aby uzyskać więcej informacji, zobacz ten Formuły aplikacji. Użyj App.Formulas, aby podzielić formułę na części, które Power Apps mogą efektywniej zorganizować się do wykonania.

Używanie współbieżności

Użyj funkcji Współbieżność, umożliwiającej jednoczesne wykonywanie formuł. Często używa się tej funkcji do wypełniania kolekcji, ponieważ umożliwia ona wykonywanie równoległe. Chociaż może to zapewnić niewielkie przyspieszenie, dodanie wielu źródeł danych może powodować problemy z synchronizacją i ograniczaniem przepustowości.

Używanie zwiększonej wydajności ukrytych kontrolek

Po włączeniu tej opcji domyślnie we wszystkich nowych aplikacjach utworzonych od grudnia 2022 r. Power Apps nie renderuje żadnych elementów sterujących, które początkowo nie byłyby widoczne.

Minimalizuj wymagane zasoby

Zminimalizuj zasoby wymagane do uruchomienia aplikacji lub ekranu. Wysiłek ten obejmuje dokładne określenie zakresu lub podzielenie zasobów, których potrzebuje Twoja aplikacja lub ekran. Poniżej znajduje się kilka sposobów, które mogą Ci pomóc.

Użyj ekranu startowego o niskim stopniu zależności i wyeliminuj nieużywane ekrany.

Użyj pierwszego ekranu o niskiej zależności, takiego jak powitanie, w swojej aplikacji. Utwórz ekran, który nie ładuje galerii, tabeli ani danych referencyjnych. Zarządza to postrzeganiem prędkości przez użytkownika i pozwala Power Fx właściwie opóźnić niektóre obliczenia na później. Jeśli masz jakieś nieużywane ekrany, usuń je.

Utrzymuj niskie zależności między ekranami

Odniesienia między stronami wymuszają ładowanie dodatkowych stron poprzez odniesienia, na przykład odwoływanie się do kontrolek na stronach i umieszczanie w kolekcjach. Niektóre odniesienia mogą być nieuniknione. Jeśli to możliwe, scentralizuj typowe odniesienia do jednej strony, tak aby ładowana była tylko strona.

Weź pod uwagę multimedia wbudowane

Autorzy czasami osadzają multimedia w swoich aplikacjach, aby zapewnić szybkie ładowanie. Jeśli masz wbudowane multimedia, zastanów się, czy ich używasz. Jeśli nie, usuń je. Jeśli osadzono plik .png, rozważ zastąpienie pliku .svg mniejszym. Pamiętaj, że jeśli używasz pliku .svg, czcionka dla pliku .svg musi znajdować się na komputerze klienckim. Weź pod uwagę wbudowaną rozdzielczość multimediów. Czy jest za wysoka dla urządzenia, na którym będzie używana?

Nie zapomnij o App.StartScreen

Jeśli korzystasz z App.StartScreen, upewnij się, że pierwszy ekran jest pusty. Ze względu na obecny pakiet aplikacji, pierwszy ekran logiczny jest zawsze dołączony do logiki inicjowania aplikacji i zostanie zainicjowany, niezależnie od tego, czy kiedykolwiek do niego przejdziemy.

Rozważ podzielenie aplikacji

Jeśli Twoja aplikacja jest duża, rozważ podzielenie jej na mniejsze aplikacje. Jeśli funkcjonalność jest wystarczająco oddzielna w różnych częściach aplikacji, to podejście może się sprawdzić. W tym scenariuszu tworzysz osobną aplikację, którą uruchamiasz z parametrami obejmującymi kontekst z pierwszej lub aplikacji nadrzędnej.

Sugestie

Aby osiągnąć cel, jakim jest szybkie uruchomienie aplikacji i strony, rozważ następujące pytania i sugestie:

  1. Czy ładujesz dużo danych na pierwszym ekranie? Czy możesz użyć innego pierwszego ekranu?
  2. Czy na początku ładowania aplikacji uruchamiasz wiele poleceń lub wyrażeń Power Fx? Czy możesz odłożyć te polecenia i wyrażenia na późniejszy punkt aplikacji? Pobierać tylko dane, których rzeczywiście potrzebujesz do uruchomienia aplikacji? 1 Czy za pomocą App.Formulas można konwertować wyrażenia w App.OnStart na nazwane formuły? Pozwala to Power Fx decydować, kiedy faktycznie wykonać formułę, zamiast wymuszać to podczas ładowania lub nawigowania po zdarzeniach.
  3. Czy możesz użyć oddzielnego przepływu Power Automate, aby utworzyć tabelę tymczasową w lokalnym magazyn danych, takim jak Dataverse, który łączy dane z różnych źródeł? A następnie uzyskać dostęp do tych danych w aplikacji Power App?
  4. Czy w przypadku rozpoczynania procesów biznesowych można używać akcji wyzwalanych przez serwer zamiast wywoływać przepływ Power Automate?
  5. Czy możesz utworzyć widok na serwerze, który łączy dane za Ciebie?
  6. Jeśli chcesz korzystać z danych offline w swojej aplikacji, czy możesz skorzystać z funkcji offline Power Apps, która współpracuje z Dataverse? Jeśli Twoich danych nie ma w Dataverse, czy możesz je tam przenieść?