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


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

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

  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")
    );

Де, Col1 Col2, і 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, чи можете ви їх туди перемістити?