Ограничения ресурсов и оптимизация производительности надстроек Office
Качественные надстройки должны соответствовать определенным требованиям к использованию ядра ЦП, использованию памяти, надежности, а для надстроек Outlook — времени отклика на оценку регулярных выражений. Эти ограничения помогают обеспечить производительность для пользователей и бороться с атаками отказа в обслуживании. Обязательно протестируйте надстройку Office в целевом приложении Office, используя диапазон возможных данных, и оцените ее производительность в соответствии со следующими ограничениями использования во время выполнения.
Ограничения на использование ресурсов для надстроек
Следующие ограничения ресурсов среды выполнения применяются ко всем надстройкам, работающим в клиентах Office в Windows и Mac, но не в мобильных приложениях или в браузере.
Использование ядра ЦП . Пороговое значение использования одного ядра в 90 %, по умолчанию наблюдается 3 раза за 5 секунд.
Если клиент Office обнаруживает, что загрузка ядра ЦП надстройки превышает пороговое значение, отображается сообщение с вопросом, хочет ли пользователь продолжить запуск надстройки. Если пользователь решает продолжить, клиент Office не запрашивает пользователя повторно во время этого сеанса редактирования. Интервал по умолчанию для клиента Office для проверка использования ядра ЦП составляет каждые 5 секунд. Администраторы могут использовать раздел реестра AlertInterval , чтобы повысить пороговое значение, чтобы уменьшить отображение этого предупреждающего сообщения, если пользователи запускают надстройки с интенсивным использованием ЦП.
Использование памяти. Пороговое значение использования памяти по умолчанию, которое определяется динамически на основе доступной физической памяти устройства.
По умолчанию, когда клиент Office обнаруживает, что объем физической памяти на устройстве превышает 80 % доступной памяти, клиент начинает отслеживать использование памяти надстройкой. Это делается на уровне документа для контентных надстроек и надстроек области задач, а также на уровне почтового ящика для надстроек Outlook. С интервалом по умолчанию в 5 секунд клиент предупреждает пользователя, если физическое использование памяти для набора надстроек на уровне документа или почтового ящика превышает 50 %. Этот предел использования памяти рассчитан для физической, а не виртуальной памяти, и позволяет обеспечить производительность на устройствах с ограниченной оперативной памятью, таких как планшеты. Администраторы могут переопределить этот динамический параметр явным ограничением, используя раздел реестра MemoryAlertThreshold Windows в качестве глобального параметра. Кроме того, они могут настроить интервал оповещений с помощью клавиши AlertInterval .
Отказоустойчивость — ограничение по умолчанию в 4 сбоя во время сеанса документа.
Администраторы могут настраивать предельное количество сбоев с помощью раздела реестра RestartManagerRetryLimit.
Блокировка приложения — длительное пороговое значение неотвеченности в 5 секунд.
Это влияет на взаимодействие пользователей с надстройкой и приложением Office. В этом случае приложение Office автоматически перезапускает все активные надстройки для документа или почтового ящика (если применимо) и предупреждает пользователя о том, что надстройка не отвечает. Надстройки достигают этого порогового значения, если они не дают регулярной обработки при выполнении длительных задач. Далее в этой статье описаны методы, которые помогут убедиться, что надстройка не блокирует приложение Office. Администраторы не могут переопределять это пороговое значение.
Надстройки области задач и контентные надстройки
Если какая-либо контентная надстройка или надстройка области задач превышает предыдущие пороговые значения по загрузке ядра ЦП или памяти или предел допуска сбоев, соответствующее приложение Office отображает предупреждение для пользователя. В этот момент пользователь может сделать одно из следующих действий:
- Перезапустить надстройку.
- Отмена дальнейших оповещений о превышении этого порогового значения. В идеале пользователь должен удалить надстройку из документа. Дальнейшее использование надстройки приведет к дальнейшему риску проблем с производительностью и стабильностью.
Надстройки Outlook
Если какая-либо надстройка Outlook превышает предыдущие пороговые значения для использования ядра ЦП или памяти или предел допуска сбоев, надстройка становится недоступной. В Центре Администратор Exchange отображается состояние надстройки.
Примечание.
Несмотря на то, что только Outlook в Windows (классической) и mac отслеживают использование ресурсов, если любой из этих клиентов делает надстройку Outlook недоступной, эта надстройка также становится недоступной в Outlook в Интернете, на мобильных устройствах и в новом Outlook в Windows.
Помимо правил ядра ЦП, памяти и надежности, надстройки Outlook должны соблюдать следующие правила при активации.
Время отклика регулярных выражений — пороговое значение по умолчанию в 1000 миллисекундах для Outlook для оценки всех регулярных выражений в манифесте надстройки Outlook. Превышение порогового значения приводит к тому, что Outlook будет повторно выполнять оценку позже.
Администраторы могут настроить это пороговое значение по умолчанию в 1000 миллисекундах с помощью параметра групповой политики или приложения для раздела OutlookActivationAlertThreshold в реестре Windows.
Повторное вычисление регулярных выражений — ограничение по умолчанию в 3 раза для outlook для повторной оценки всех регулярных выражений в манифесте. Если оценка не выполняется в течение 3 раз, Outlook делает надстройку недоступной.
Администраторы могут изменить это количество раз, чтобы повторить оценку, используя групповую политику или параметр приложения для раздела OutlookActivationManagerRetryLimit в реестре Windows.
Надстройки Excel
Надстройки Excel имеют важные ограничения на передачу данных при взаимодействии с книгой.
- В Excel в Интернете действует ограничение в 5 МБ на размер полезных данных запросов и откликов. При превышении этого ограничения возникает ошибка
RichAPI.Error
. - Диапазон ограничен 5 000 000 ячеек для операций чтения.
Если предполагается, что входные данные пользователя превысят эти ограничения, проверка данные перед вызовом context.sync()
. При необходимости разделите операцию на более мелкие части. Вызовите context.sync()
каждую подоперию, чтобы избежать повторного объединения этих операций.
Эти ограничения обычно превышаются большими диапазонами. Ваша надстройка может использовать RangeAreas для стратегического обновления ячеек в большом диапазоне. Дополнительные сведения о работе с RangeAreas
см. в разделе Работа с несколькими диапазонами одновременно в надстройках Excel. Дополнительные сведения об оптимизации размера полезных данных в Excel см. в статье Рекомендации по ограничению размера полезных данных.
Проверка проблем с использованием ресурсов в журнале телеметрии
Office предоставляет журнал телеметрии, в котором хранится запись определенных событий (загрузка, открытие, закрытие и ошибки) для решений Office, работающих на локальном компьютере. Сюда входят проблемы с использованием ресурсов в надстройке Office. Если у вас настроен журнал телеметрии, вы можете использовать Excel, чтобы открыть журнал телеметрии в следующем расположении по умолчанию на локальном диске.
%Users%\<Current user>\AppData\Local\Microsoft\Office\16.0\Telemetry
Для каждого события надстройки, которое регистрируется в журнале телеметрии, определяются дата и время возникновения, идентификатор, серьезность, краткий описательный заголовок, понятное имя, уникальный идентификатор надстройки и приложение, внесшее сведения об этом событии в журнал. Обновите журнал телеметрии, чтобы просмотреть текущие отслеживаемые события. В таблице ниже приведены примеры надстроек Outlook, которые отслеживались в журнале телеметрии.
Дата и время | Идентификатор события | Severity | Название | File | ИД | Приложение |
---|---|---|---|---|---|---|
8.10.2022 17:57:10 | 7 | Не применимо | Манифест надстройки загружен успешно | Who's Who | 69cc567c-6737-4c49-88dd-123334943a22 | Outlook |
8.10.2022 17:57:01 | 7 | Не применимо | Манифест надстройки загружен успешно | 333bf46d-7dad-4f2b-8cf4-c19ddc78b723 | Outlook |
В следующей таблице перечислены события, отслеживаемые журналом телеметрии для надстроек Office.
Идентификатор события | Название | Severity | Описание |
---|---|---|---|
7 | Манифест надстройки загружен успешно | Не применимо | Манифест надстройки Office был успешно загружен и прочитан приложением Office. |
8 | Манифест надстройки не загружен | Критический | Приложению Office не удалось загрузить файл манифеста надстройки Office из каталога SharePoint, корпоративного каталога или AppSource. |
9 | Не удается выполнить анализ разметки надстройки | Критическая | Приложение Office загрузит манифест надстройки Office, но не могло прочитать HTML-разметку приложения. |
10 | Надстройка использует слишком много ресурсов ЦП | Критическая | Приложение Надстройка Office использовало более 90 % ресурсов ЦП за конечный промежуток времени. |
15 | Тайм-аут поиска строки привел к отключению надстройки | Не применимо | Надстройки Outlook выполняют поиск строки темы и основной части электронного сообщения, чтобы определить, требуется ли их отображать с использованием регулярного выражения. Клиент Outlook отключил надстройку Outlook, указанную в столбце Файл, из-за многократного превышения времени ожидания при попытке сопоставления регулярного выражения. |
18 | Надстройка успешно закрыта | Не применимо | Приложению Office удалось успешно закрыть надстройку Office. |
19 | Надстройка обнаружила ошибку времени выполнения | Критическая | Приложение Надстройка Office столкнулось с проблемой и завершилось со сбоем. Для получения дополнительных сведений просмотрите журнал оповещений Microsoft Office с помощью средства просмотра событий Windows на том компьютере, где возникла ошибка. |
20 | Сбой надстройки при проверке лицензирования | Критическая | Не удалось проверить сведения о лицензировании для приложения Надстройка Office, возможно, срок их действия истек. Для получения дополнительных сведений просмотрите журнал оповещений Microsoft Office с помощью средства просмотра событий Windows на том компьютере, где возникла ошибка. |
Дополнительные сведения см. в разделах Развертывание панели мониторинга телеметрии и Устранение неполадок с файлами Office и пользовательскими решениями с помощью журнала телеметрии
Методы проектирования и реализации
Хотя ограничения ресурсов на использование ЦП и памяти, отказоустойчивость и скорость реагирования пользовательского интерфейса применяются к надстройкам Office, работающим только в классических клиентах Office, оптимизация должна быть приоритетом, если вы хотите, чтобы надстройка удовлетворительно выполнялась на всех поддерживающих клиентах и устройствах. Оптимизация особенно важна, если надстройка выполняет длительные операции или обрабатывает большие наборы данных. В следующем списке представлены некоторые методы, позволяющие разбить ресурсоемкие ресурсы ЦП или операции с большим объемом данных на небольшие блоки, чтобы надстройка избежать чрезмерного потребления ресурсов и обеспечить реагирование приложения Office.
Если надстройке нужно считывать большой объем данных из неограниченного набора данных, можно применить разбиение по страницам при чтении данных из таблицы или уменьшить размер данных в каждой короткой операции чтения, а не пытаться завершить чтение за одну операцию. Это можно сделать с помощью метода setTimeout глобального объекта, чтобы ограничить длительность ввода и вывода. It also handles the data in defined chunks instead of randomly unbounded data. Другой вариант — использовать асинхронную обработку обещаний.
Если надстройка использует ресурсоемкий алгоритм для обработки большого объема данных, вы можете использовать веб-рабочие роли для выполнения длительной задачи в фоновом режиме при выполнении отдельного скрипта на переднем плане, например отображения хода выполнения в пользовательском интерфейсе. Рабочие веб-процессы не блокируют действия пользователя и позволяют HTML-странице отвечать на запросы. Пример рабочих веб-процессов можно посмотреть в статье Основные сведения о рабочих веб-процессах.
Если надстройка использует алгоритм с ресурсоемким ЦП, но вы можете разделить входные или выходные данные на более мелкие наборы, рассмотрите возможность создания веб-службы, передачи данных в веб-службу для разгрузки ЦП и ожидания асинхронного обратного вызова.
Протестируйте надстройку с самым большим ожидаемым объемом данных и запретите обработку большего объема.
Повышение производительности с помощью API-интерфейсов приложений
Советы по повышению производительности в статье Использование модели API для конкретного приложения содержат рекомендации по использованию API для приложений для Excel, OneNote, Visio и Word. Подводя итоги, необходимо:
- Загружайте только необходимые свойства.
-
Сведите к минимуму количество вызовов sync(). Дополнительные сведения об управлении вызовами в коде см. в статье Избегайте использования метода context.sync в циклах.
sync
- Сведите к минимуму количество созданных прокси-объектов. Вы также можете отменить отслеживание прокси-объектов, как описано в следующем разделе.
Отмена отслеживания ненужных прокси-объектов
Прокси-объекты сохраняются в памяти до вызова RequestContext.sync()
. Операции с большими пакетами могут создавать много прокси-объектов, необходимых надстройке лишь один раз, которые можно удалить из памяти до выполнения пакетных действий.
Метод untrack()
освобождает объект из памяти. Этот метод реализуется во многих объектах прокси-сервера API для конкретного приложения. Вызов untrack()
после завершения работы надстройки с объектом должен обеспечить заметное преимущество производительности при использовании большого количества прокси-объектов.
Примечание.
Range.untrack()
— это ярлык для ClientRequestContext.trackedObjects.remove(thisRange). Отслеживание любого прокси-объекта можно прекратить, удалив его из списка отслеживаемых объектов в контексте.
Следующий пример кода Excel заполняет выбранный диапазон данными по одной ячейке за раз. После добавления значения в ячейку, диапазон отображает, что отслеживание ячейки прекращено. Выполните этот код с выбранным диапазоном от 10 000 до 20 000 ячеек сначала со строкой cell.untrack()
, а затем без нее. Вы должны заметить, что код выполняется с использованием строки cell.untrack()
быстрее, чем без нее. Вы также можете заметить уменьшение времени отклика впоследствии, так как этап очистки занимает меньше времени.
Excel.run(async (context) => {
const largeRange = context.workbook.getSelectedRange();
largeRange.load(["rowCount", "columnCount"]);
await context.sync();
for (let i = 0; i < largeRange.rowCount; i++) {
for (let j = 0; j < largeRange.columnCount; j++) {
let cell = largeRange.getCell(i, j);
cell.values = [[i *j]];
// Call untrack() to release the range from memory.
cell.untrack();
}
}
await context.sync();
});
Обратите внимание, что отмена отслеживания объектов становится важной только при работе с тысячами объектов. Большинству надстроек не требуется управлять отслеживанием объектов прокси-сервера.
См. также
Office Add-ins