Советы и рекомендации по повышению производительности приложений на основе холста

В предыдущих статьях вы узнали об этапах выполнения и потока вызовов данных, общих источниках с низкой производительностью и общих проблемах с производительностью и их решениях в приложениях на основе холста. Вы также можете получить преимущества, следуя советам и рекомендациям из этой статьи, чтобы повысить производительность создаваемых вами приложений.

Ограничение подключений к данным

Не добавляйте более 30 подключений в одно приложение.. Приложения подсказывают новым пользователям выполнить вход в каждый соединитель, поэтому каждый дополнительный соединитель увеличивает время, необходимое для запуска приложения. Когда приложение запрашивает данные из этого источника, по мере запуска приложения каждый соединитель требует ресурсы процессора, памяти и пропускной способности сети.

Можно быстро оценить производительность приложения, включив инструменты разработчика в Microsoft Edge или Google Chrome во время работы приложения. Скорее всего, вашему приложению потребуется больше 15 секунд для возврата данных, если оно часто запрашивает данные из более чем 30 подключений. Каждое добавленное соединение учитывается в этом лимите отдельно, независимо от типа подключенного источника данных — такие как Microsoft Dataverse или таблицы SQL Server, или списки, созданные в Microsoft Списки.

Ограничение количества элементов управления

Не добавляйте более 500 элементов управления в одно приложение.. Power Apps генерирует объектную модель документа HTML для визуализации каждого элемента управления. Чем больше элементов управления вы добавляете, тем больше требуется времени Power Apps.

Если использовать коллекцию вместо отдельных элементов управления, в некоторых случаях вы можете добиться того же результата и быстрее запустить приложение. Кроме того, может потребоваться уменьшить количество типов элементов управления на одном экране. Некоторые элементы управления (такие как средство просмотра PDF, таблица данных и поле со списком) загружают большие сценарии выполнения и занимают больше времени для отрисовки.

Оптимизация свойства OnStart

Используйте функцию ClearCollect для локального кэширования данных, если она не изменяется во время сеанса пользователя. Также используйте функцию Concurrent для одновременной загрузки источников данных; это может вдвое сократить время, необходимое приложению для загрузки данных. Дополнительные сведения: Функция Concurrent в Power Apps

Без функции Concurrent следующая формула загружает каждую из четырех таблиц по одной за раз:

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

Вы можете подтвердить это поведение в инструментах разработчика для своего браузера, как показано на следующем изображении.

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

Можно включить ту же формулу в функцию Concurrent, чтобы сократить общее время, необходимое для работы.

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

С этим изменением приложение извлекает таблицы параллельно, как показано на следующем изображении.

Диаграмма, показывающая, что четыре таблицы загружаются одновременно.

Примечание

Для получения дополнительной информации о проблемах с производительностью и решениях, связанных с OnStart, прочтите Событие OnStart требует настройки.

Совет

Мы рекомендуем использовать свойство App.StartScreen, поскольку оно упрощает запуск приложения и повышает его производительность.

Данные поиска в кэше

Используйте функцию Set для кэширования данных из просмотра локальных таблиц, чтобы избежать многократного получения данных из источника. Этот метод оптимизирует производительность, если данные с большой вероятностью не изменятся во время сеанса. Как показано в следующем примере, данные извлекаются из источника один раз, а после этого на них ссылаются локально, пока пользователь не закрывает приложение.

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

Этот метод более полезен для таких данных, как информация контакта, значения по умолчанию или информация о пользователях, которые не часто меняются. Также можно использовать этот метод с функциями Defaults и User.

Недопущение зависимостей элементов управления между появлением экранов

Для повышения производительности экраны приложения загружаются в память только по мере необходимости. Эта оптимизация может быть затруднена, если, например, загружен экран 1 и одна из его формул использует свойство элемента управления с экрана 2. Теперь экран 2 должен быть загружен для выполнения зависимости, прежде чем экран 1 может быть отображен. Представьте, что экран 2 имеет зависимость от экрана 3, который имеет другую зависимость от экрана 4 и так далее. Эта цепочка зависимостей может привести к загрузке многих экранов.

По этой причине избегайте в формулах зависимостей между экранами. В некоторых случаях вы можете использовать глобальную переменную или коллекцию для обмена информацией между экранами.

Имеется исключение: в предыдущем примере представьте, что единственный способ отобразить экран 1 — это перейти с экрана 2. Затем экран 2 будет уже загружен в память, когда должен быть загружен экран 1. Для выполнения зависимости для экрана 2 не требуется дополнительной работы, и, следовательно, это не влияет на производительность.

Использование делегирования

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

Совет

Чтобы узнать о делегируемых функциях, поддерживаемых конкретными соединителями, перейдите к документации по соединителю.

В качестве примера делегируемых функций рассмотрим столбец ID, определенный как тип данных Количество в списке, созданном с помощью Microsoft Списки. Формулы в следующем примере вернут ожидаемые результаты. Однако первая формула является делегируемой, а вторая — неделегируемой.

Формула Делегируемый?
Filter ('List data source', ID = 123 ) Да
Filter(`List data source', ID ="123") Нет

Поскольку мы предполагаем, что столбец идентификатора в SharePoint определен с типом данных Число, значение в правой части должно быть числовым, а не строковым. В противном случае такое несоответствие может привести к тому, что формула станет неделегируемой.

Использование неделегируемых функций и недопустимые лимиты строк данных для неделегируемых запросов могут отрицательно сказаться на производительности приложения. Дополнительные сведения: Общие сведения о делегировании в приложении на основе холста

Используйте отложенную загрузку

Включите предварительную версию функции для отложенной загрузки, если ваше приложение содержит более 10 экранов и множество элементов управления, которые находятся на нескольких экранах и напрямую связаны с источником данных, а также не содержит правил. Если вы создаете этот тип приложения и не включаете эту функцию, производительность приложения может снизится, так как элементы управления должны заполняться на всех экранах, даже на экранах, которые не открыты. Кроме того, все экраны приложения должны обновляться всякий раз, когда изменяется источник данных, например, когда пользователь добавляет запись.

Работа с большими наборами данных

Используйте источники данных и формулы, которые можно делегировать, чтобы ваши приложения работали хорошо, а пользователи могли получить доступ ко всей необходимой им информации и избежать ограничения в 2000 строк данных для неделегированных запросов. Для столбцов записей данных, по которым пользователи могут искать, фильтровать или сортировать данные, используйте индексы столбцов, как описано в источниках данных, таких как SQL Server или SharePoint.

Примечание

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

Регулярная повторная публикация приложений

Создателям рекомендуется регулярно публиковать свои приложения. Поскольку платформа Power Apps постоянно оптимизируется и развертывается, ваше приложение восстанавливается с учетом последних оптимизаций платформы при его повторной публикации.

Избегайте повторения одной и той же формулы в нескольких местах

Если несколько свойств запускают одну и ту же формулу (особенно если она сложная), рассмотрите возможность задать ее один раз, а затем ссылаться на выходные данные первого свойства в последующих. Например, не устанавливайте для свойства DisplayMode элементов управления A, B, C, D и E одну и ту же сложную формулу. Вместо этого установите для свойства DisplayMode элемента управления A сложную формулу, установите для свойства DisplayMode элемента управления B результат для свойства DisplayMode элемента управления A и т. д. для C, D и E.

Включение DelayOutput на всех элементах управления вводом текста

Если у вас есть несколько формул или правил, которые ссылаются на значение элемента управления Ввод текста, установите для свойства DelayedOutput этого элемента управления значение true. Свойство Текст этого элемента управления будет обновлено только после того, как нажатия клавиш, введенные в быстрой последовательности, прекратятся. Формулы или правила не будут выполняться много раз, и производительность приложения улучшится.

Избегайте использования Form.Updates в правилах и формулах

Если вы ссылаетесь на введенное пользователем значение в правиле или формуле с помощью переменной Form.Updates, перебираются все карточки данных формы и каждый раз создается запись. Чтобы сделать ваше приложение более эффективным, укажите значение непосредственно с карточки данных или из значения элемента управления.

Используйте счетчик DelayItemLoading и LoadingSpinner для повышения производительности в коллекции

В зависимости от конфигурации коллекции может потребоваться больше времени для визуализации видимых строк. Есть несколько способов повысить производительность.

  • Упростите шаблон. Например, рассмотрите возможность уменьшения количества элементов управления, ссылок на поисковые запросы.
  • Коллекции со сложными шаблонами могут получить преимущества, если для DelayItemLoading задано значение истина, для LoadingSpinner задано LoadingSpinner.Controls. Это изменение улучшит восприятие при увеличении времени отрисовки. DelayItemLoading также отложит отрисовку шаблонов, что позволит остальной части экрана отображаться быстрее, поскольку и экран, и коллекция не конкурируют за ресурсы.

Включение предзагрузки приложения для ускорения работы

При желании вы можете предварительно загружать свое приложение, чтобы повысить быстродействие.

  1. Войдите в Power Apps, а затем выберите Приложения в меню.

  2. Выберите Другие действия (...) для приложения, которым вы хотите поделиться, затем выберите Параметры.

  3. На панели параметров переключите Предварительно загружать приложение для повышения производительности в значение Да. После этого приложение будет предварительно загружаться.

Предзагрузка приложения для ускорения работы.

  1. Чтобы изменения вступили в силу для приложений, встроенных в Teams, удалите и снова добавьте свое приложение в Teams.

    Примечание

    Это делает скомпилированные ресурсы приложения доступными через конечные точки без проверки подлинности, что позволяет загружать их перед проверкой подлинности. Однако пользователи по-прежнему могут использовать ваше приложение для доступа к данным через соединители только после завершения проверки подлинности и авторизации. Такое поведение гарантирует, что данные, которые приложение извлекает из источников данных, не будут доступны несанкционированным пользователям. Скомпилированные ресурсы приложения включают набор файлов JavaScript, содержащих текст, созданный в элементах управления приложения (например, элементы управления PCF), медиаресурсы (например, изображения), имя приложения и URL-адрес среды, в которой находится приложение.

    Как правило, приложения должны извлекать файлы мультимедиа и информацию из источников данных через соединения. Если данные мультимедиа и информация должны быть добавлены в приложение без подключения к сети и считаются конфиденциальными, вы можете отключить этот параметр. Обратите внимание, что отключение этого параметра приведет к тому, что пользователи будут немного дольше ждать доступа к приложению.

Данные приложения, хранящиеся на устройстве

Чтобы пользователи могли быстрее получать сведения о приложении при его запуске, определенные данные будут локально храниться на вашем устройстве в кеше браузера. Информация, которая будет храниться, включает сведения о приложении, среде и подключении. Эти данные будут храниться в браузере в соответствии с ограничениями хранилища каждого браузера. Чтобы очистить сохраненные данные, см. инструкции для каждого браузера.

Дальнейшие шаги

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

См. также

Общие сведения о потоке вызовов данных и этапах выполнения приложения на основе холста
Распространенные проблемы с производительностью приложений на основе холста и способы их решения
Распространенные причины низкой производительности приложения на основе холста
Распространенные проблемы и способы их решения для Power Apps
Устранение неполадок при запуске для Power Apps

Примечание

Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).

Опрос займет около семи минут. Личные данные не собираются (заявление о конфиденциальности).