Быстрые вычисления
Выражения Power Fx являются мощными инструментами и автоматически выполняют множество фоновых вычислений. Пока Power Fx автоматизирует многие вещи для вас, можно точно настроить ваши расчеты так, чтобы они выполнялись как можно быстрее.
Извлечение данных
Использование явного выбора столбцов
Функция явного выбора столбца (ECS) включена по умолчанию для всех новых приложений. Если она не включена для вашего приложения, вам следует ее включить. ECS автоматически сокращает количество извлекаемых столбцов до тех, которые используются в приложении. Если ECS не включена, возможно, вы получаете больше данных, чем вам нужно, что может повлиять на производительность. Иногда, когда приложение получает данные через коллекции, исходное происхождение или источник столбца может быть утерян. Мы не знаем, используется ли он, и удаляем его с помощью ECS. Обычно вы можете заставить ECS работать с отсутствующим столбцом, используя выражение PowerFx ShowColumns после ссылки на коллекцию или с помощью ее использования в элементе управления.
Осторожно используйте изображения в коллекциях, таблицах и формах
Используйте миниатюрные версии изображений Dataverse для галерей и таблиц. Миниатюры Dataverse имеют небольшой размер (около 1 килобайта), хранятся внутри записи и полезны и быстро отображаются в элементах управления, отображающих коллекции. Все остальные ссылки на изображения, включая все изображения SharePoint, требуют отдельного вызова и не должны размещаться в галерее или таблице. Размещайте изображения, требующие отдельного вызова, в детальных формах. Подумайте о том, чтобы никогда не показывать полное изображение по умолчанию. Полные подробные изображения могут быть полезны и важны для пользователей. Однако вы можете сделать эти изображения доступными для пользователей посредством явного действия пользователя, например, кнопки или перехода на отдельную страницу. SharePoint имеет ряд изображений среднего размера, которые вы можете использовать в форме вместо полного изображения. Dataverse имеет только два размера: «Миниатюра» и «Полное».
Вычисления
Разделение формул с помощью App.formula
Использование App.formulas и именованных формул может повысить скорость загрузки приложения и навигации по страницам, поскольку позволяет Power Fx решать, когда оценивать формулу. Это означает, что ее не обязательно оценивать в OnStart. Кроме того, именованные формулы обычно помогают ускорить работу. В частности, если у вас длинный скрипт, его разбиение на именованные формулы позволит повысить эффективность вычислений, поскольку Power Fx может планировать работу и обеспечивает повторное использование. Для получения дополнительной информации см. Формулы приложения.
Использование Concurrent
Используйте функцию Concurrent, чтобы разрешить одновременное выполнение формул. Тщательно выбирайте, где используется Concurrent. Это может обеспечить небольшое ускорение, но если вы используете элементы, которые зависят друг от друга, это может вызвать проблемы с синхронизацией и регулированием количества запросов.
Отложите значительные обновления до неблокирующего этапа пользовательского интерфейса
Большие обновления источника данных могут занять некоторое время. Но пользователи ожидают, что пользовательский интерфейс быстро вернет им контроль. Задачи могут быть либо последовательными, когда обновление должно завершиться, прежде чем пользователь сможет выполнить другие действия, либо асинхронными (обновление может завершиться отдельно от действий пользователя).
Примером трудоемкой синхронной задачи является подтверждение места на концерте. Для большинства трудоемких синхронных задач, подобных этой, обычно выставляется индикатор выполнения. Этот пользовательский интерфейс фактически блокирует пользователя, но гарантирует выполнение задачи до обновления других элементов пользовательского интерфейса. Этот подход может не работать для вашего приложения. Компании обычно рассматривают более длинные последовательные шаги как явные бизнес-шаги. Вам разрешено перейти к следующему шагу посредством сигнала бизнес-процесса. Примером является утверждение. Утверждение может прийти быстро, а может быть задержано. В пользовательском интерфейсе вы можете сигнализировать о завершении процесса несколькими способами. Вы можете включить кнопку, отобразить сообщение, отправить электронное письмо или включить часть пользовательского интерфейса, например пункт меню.
Примером асинхронной задачи является выполнение заказа. Клиент обновляет корзину заказов, обрабатывает свой заказ, а затем размещает его. Но прежде чем клиенту сообщат подтвержденную дату отгрузки, должно произойти несколько обновлений. В этом примере дату отправки нелегко указать сразу. , вы можете отложить эту часть обновления до электронного письма, которое будет отправлено клиенту позже.
Для синхронных задач вы часто будете использовать код из Power Apps для блокирующих задач пользовательского интерфейса. Например, код ждет, пока не получит возвращаемое значение, а затем выпускает индикатор выполнения. Лучше всего свести к минимуму подобные ситуации. Но для задач, которые используют явный бизнес-шаг или асинхронные задачи, для выполнения задачи обычно используется внешняя служба, например действие Dataverse, хранимая процедура или поток Power Automate.
Правильно размещайте вызовы ForAll
Если у вас есть выражение с ForAll и Collect, которое выглядит так:
ForAll(x, Collect(y, { … }))
Тогда измените порядок на
Collect(y, ForAll(x, { … }))
В первом шаблоне любое зависимое правило коллекции y уведомляется об изменениях и оценивается для каждой итерации x. Во втором шаблоне эти правила оцениваются только один раз.
Подумайте о том, чтобы избежать ссылок на Gallery.AllItems
При работе с Power Apps лучше избегать ссылок на Gallery.AllItems, если только вам не нужны пользовательские значения. Это связано с тем, что каждый раз при чтении AllItems создается новая выходная таблица. Вместо этого используйте Gallery.AllItemsCount, если вы просто хотите узнать, сколько элементов загружено.
Осторожно используйте Gallery.TemplateSize
Чтобы галереи с гибкой высотой отображались правильно, важно установить разумный размер по умолчанию. Первоначально мы пытаемся отобразить как можно больше строк на основе этого значения. Если вы установите размер по умолчанию равный 0, мы попытаемся отобразить все, за исключением нескольких крайних случаев. Если вы используете формулу, обязательно установите минимальное значение, когда формула может иметь значение 0. Например, вы можете использовать Max (20, varFoo + rectBar.Height). Таким образом, если varFoo и rectBar.Height еще недоступны, мы, по крайней мере, используем разумное значение 20.
Обратите внимание на DelayOutput, особенно для поиска
Перед обнаружением изменений происходит задержка в одну секунду, что позволяет завершить ввод вместо обнаружения изменений для каждого вводимого символа.