Поділитися через


Оптимізуйте завантаження додатків або сторінок для максимальної продуктивності

Одним із ключових факторів, які формують сприйняття користувачем програми, є те, як швидко вона відкривається та стає функціональною. Тому пріоритизація цієї мети має вирішальне значення для створення ефективної програми. Щоб досягти оптимальної продуктивності програми, потрібно звернути увагу на три основні сфери:

  1. Швидке завантаження даних
  2. Ефективні розрахунки
  3. Мінімізація необхідних ресурсів

Кожна з цих областей має кілька загальних антипатернів.

Швидке завантаження даних

Дотримуйтесь цих вказівок, щоб досягти швидкого завантаження даних програм.

Уникайте прямого заповнення колекції великими обсягами даних

Іноді автори використовують ClearCollect() для копіювання даних із сервера до колекції у своєму додатку. Ця практика є обхідним шляхом для делегування обмежень у джерелі або через те, що вони планують використовувати колекції в додатку для інших цілей. Використання ClearCollect() потенційно може збільшити швидкість програми, коли колекція буде пізніше використана. Однак важливо проявляти обережність під час його реалізації. Використання ClearCollect у такий спосіб може призвести до уповільнення завантаження програм або під час навігації між сторінками. ClearCollect() має завершитися, перш ніж ви зможете побачити дані в галереї або таблиці. Цей крок може зайняти багато часу, якщо є багато даних або якщо ви використовуєте цей підхід для занадто великої кількості джерел даних. Колекції найкраще використовувати для ситуацій, коли дані невеликі, і вам потрібно зробити багато обчислень для збору. Наприклад, вдалим варіантом використання колекцій є кошик для онлайн-замовлень. Клієнт може оновлювати та видаляти товари кілька разів, перш ніж прийняти рішення про збереження замовлення. Крім того, ви можете поповнити колекцію додатковими елементами даних, такими як потенційні знижки, основні моменти тощо. Доступ до даних, доступних лише для читання, слід отримувати за замовчуванням, не додаючи їх до колекції.

Уникайте викликів Power Automate для заповнення колекції

Це питання є невеликою варіацією попереднього розділу. Іноді автори також наповнюють Power Automate свою колекцію в Power Apps. Створення екземпляра продуктивності коштує приблизно 0,6 секунди Power Automate. Power Automate повинні запускатися незалежно при кожному виклику. Він повинен виділяти пам’ять, розташовуватися з потрібними компонентами і бути готовим до роботи. Як і у випадку з наведеною вище порадою, один або два виклики можуть Power Automate не бути проблемою залежно від вашого додатка. Але майже повсюдно найгірші програми зловживають цим підходом. Вартість продуктивності може швидко зрости та зіпсувати продуктивність вашого додатка.

Уникайте використання SaveData() і LoadData() як повноцінного автономного сценарію

Деякі автори використовують ClearCollect(), а потім SaveData() для зберігання даних для загального використання в автономному режимі. Ви можете використовувати SaveData(), щоб зберегти колекцію на своєму пристрої, і LoadData(), щоб завантажити її, коли ви перебуваєте в автономному режимі. Однак цей підхід не рекомендується для випадків, коли є великий обсяг даних або якщо дані складні. Це робить ваш додаток повільнішим, оскільки йому потрібно чекати, поки ClearCollect() завершиться, перш ніж він зможе показати дані. Ви повинні використовувати SaveData() і LoadData() лише для невеликих і простих сценаріїв даних, таких як налаштування та короткі списки. Кращим способом роботи з великими обсягами офлайн-даних є використання функції автономного режиму Power Apps , з якою вона працює Dataverse. Ця функція може ефективніше обробляти більші та складніші дані.

Використання явного вибору стовпця

Явний вибір стовпчика ввімкнено за замовчуванням. Однак деякі автори вимикають цю функцію. Проблема полягає в тому, що якщо ввімкнено явний вибір стовпців (ECS), стовпці іноді не витягуються з джерело даних, якщо дані вперше отримано до колекції. Оскільки деякі таблиці можуть містити багато стовпців, ECS автоматично обчислює, які стовпці потрібно отримати, виходячи з їх використання в елементах керування (наприклад, у галереях і формах). Оскільки деякі таблиці можуть містити багато стовпців, зменшення розміру завантаження може прискорити продуктивність. Деякі таблиці можуть мати сотню стовпців і більше. Якщо вашому додатку потрібно використовувати лише 10 стовпців, а ви знімаєте всі стовпці з таблиці зі 100 стовпців, ви завантажуєте в десять разів більше даних, ніж вам потрібно.

Найбільше проблем виникає при внесенні даних до колекцій. Якщо на стовпчик явно посилається в елементі керування, то ECS працює добре. І, як правило, ECS працює для колекцій. Однак лінія стовпців іноді втрачається, коли дані переміщуються через колекції та змінні. І, таким чином Power Apps , може втратити зв’язок з колонкою, яку він повинен отримати. Щоб вирішити цю проблему, можна примусово Power Apps «запам’ятати» стовпець за допомогою ShowColumns функції. Приклад.

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

where Col1,, і Col2— стовпчики, які ви очікуєте отримати з джерело даних (наприклад, the Col3 Account джерело даних).

Крім того, до форми можна додати прихований елемент керування, який посилається на стовпець. Це змушує Power Apps «запам’ятовувати» колонку.

Швидкі обчислення

Швидкі (або ефективні) обчислення самі по собі є метою продуктивності. Докладнішу інформацію дивіться в розділі Швидкі (ефективні) обчислення. Однак є деякі загальні антипатерни, які також можуть впливати на завантаження програми, тому ми обговорюємо їх тут. Нижче наведено список оптимізацій, які ви повинні враховувати, які можуть вплинути на запуск програми або навігацію сторінкою.

Використовуйте App.Formulas

Історично склалося так, що багато авторів поміщали велику кількість обчислень в OnStart. Коли ви розміщуєте вираз в OnStart, він змушує Power Apps запускати цей вираз саме під час запуску програми та перед усім іншим. Однак, з появою App.Formulas ви можете дозволити Power Apps вирішувати, коли запускати вираз. Power Apps може запустити формулу «Точно вчасно» до того, як вона знадобиться. Докладнішу інформацію дивіться в розділі Формули програм. Використовуйте App.Formulas, щоб розділити формулу на частини, які Power Apps можна ефективніше організувати для виконання.

Одночасне використання

Використовуйте функцію «Паралельний», щоб дозволити одночасне виконання формул. Зазвичай цю функцію використовують для заповнення колекцій, оскільки вона дозволяє паралельне виконання. Хоча це може забезпечити деяке скромне прискорення, додавання багатьох джерел даних може спричинити проблеми з синхронізацією та регулюванням.

Використання розширеної продуктивності для прихованих елементів керування

Якщо цей параметр увімкнено за замовчуванням у всіх нових програмах, створених після грудня 2022 року, Power Apps не відображає елемент керування, який спочатку не відображається.

Мінімізуйте необхідні ресурси

Мінімізуйте ресурси, необхідні для запуску програми або екрана. Ці зусилля включають ретельний аналіз або розділення ресурсів, потрібних вашому додатку або екрану. Нижче наведено кілька підходів, які вам допоможуть.

Використовуйте початковий екран із низьким рівнем залежностей і видаліть екрани, які не використовуються.

Використовуйте перший екран з низькою залежністю, наприклад привітання у вашому додатку. Створіть екран, який не завантажує галерею, таблицю або довідкові дані. Це керує сприйняттям користувачем швидкості і дозволяє Power Fx правильно відкласти деякі обчислення на потім. Якщо у вас є екрани, які не використовуються, видаліть їх.

Зменшення міжекранних залежностей між екранами

Перехресні посилання змушують завантажувати додаткові сторінки за допомогою посилань, наприклад, елементи керування посиланнями на сторінки та розміщення в колекціях. Деякі посилання можуть бути неминучими. Централізуйте загальні посилання на одній сторінці, якщо це можливо, щоб завантажувалася лише сторінка.

Розгляньте можливість використання вбудованих носіїв

Автори іноді вбудовують медіафайли у свої програми, щоб забезпечити швидке завантаження. Якщо у вас є вбудований носій, подумайте, чи використовуєте ви його. Якщо ні, видаліть його. Якщо ви вбудували файл .png, подумайте про те, щоб замінити .svg файл меншого розміру. Зауважте, що якщо ви використовуєте .svg, шрифт для .svg має бути на клієнтському комп’ютері. Розглянемо роздільну здатність вбудованого носія. Чи не занадто висока вона для пристрою, на якому вона буде використовуватися?

Не забувайте про App.StartScreen

Якщо ви використовуєте App.StartScreen, переконайтеся, що перший екран є порожнім. У зв’язку з поточною упаковкою програми, перший логічний екран завжди йде в комплекті з логікою ініціалізації програми і буде ініціалізований, незалежно від того, чи перейдемо ми коли-небудь до нього.

Розгляньте можливість розділення програми

Якщо ваш додаток великий, подумайте про те, щоб розділити його на менші програми. Якщо функції достатньо окремі в різних частинах додатка, цей підхід може спрацювати. У цьому сценарії ви створюєте окрему програму, яка запускається з параметрами, що включають контекст із першої або батьківської програми.

Пропозиції

Щоб досягти мети швидкого запуску програми та сторінки, розгляньте такі запитання та пропозиції:

  1. Ви завантажуєте багато даних на першому екрані? Чи можна використовувати інший перший екран?
  2. Ви виконуєте багато команд або Power Fx виразів на початку завантаження програми? Чи можете ви перенести ці команди і вирази на пізніший етап програми? Отримуєте лише ті дані, які потрібні для запуску програми? 1 Чи можна перетворити вирази в App.OnStart на іменовані формули за допомогою App.Formulas? Це дозволяє Power Fx вирішувати, коли насправді виконувати формулу, а не змушувати її відбуватися під час завантаження або навігації подіями.
  3. Чи можна використовувати окремий Power Automate ланцюжок для створення тимчасової таблиці в локальному сховище даних Dataverse , наприклад, який об’єднує дані з різних джерел? А потім отримати доступ до цих даних у своєму додатку Power App?
  4. Чи можна використовувати дії, що запускаються на сервері, замість виклику Power Automate Flow?
  5. Чи можете ви створити представлення даних на сервері, яке об’єднує дані для вас?
  6. Якщо ви хочете використовувати офлайн-дані у своєму додатку, чи можете ви використовувати Power Apps функцію офлайн, яка працює з нею Dataverse? Якщо ваших даних немає Dataverse, чи можете ви перемістити їх туди?