Ограничения ресурсов и оптимизация производительности надстроек Office

Чтобы обеспечить максимальное удобство работы для пользователей, разработчику необходимо убедиться, что Надстройка Office работает в заданных пределах использования ЦП и памяти, что она достаточно надежна, а в случае надстроек Outlook еще и проверить время ответа при оценке регулярных выражений. Эти ограничения на использование ресурсов во время выполнения применяются к надстройкам, работающим в клиентах Office в Windows и OS X, но не в мобильных приложениях или в браузере.

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

Ограничения на использование ресурсов для надстроек

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

  • Загрузка ядра ЦП. Загрузка одного ядра ЦП не должна превышать 90 % (проверяется три раза с интервалом 5 секунд).

    Интервал по умолчанию для клиента Office для проверки использования ядра ЦП составляет каждые 5 секунд. Если клиент Office обнаруживает, что загрузка ядра ЦП надстройки превышает пороговое значение, отображается сообщение с вопросом, хочет ли пользователь продолжить запуск надстройки. Если пользователь решает продолжить, клиент Office не запрашивает пользователя повторно во время этого сеанса редактирования. С помощью раздела реестра AlertInterval администраторы могут повысить пороговое значение, чтобы это сообщение отображалось реже, если пользователи работают с надстройками, требующими больших затрат ресурсов ЦП.

  • Использование памяти. Пороговое значение использования памяти по умолчанию, которое определяется динамически на основе доступной физической памяти устройства.

    По умолчанию, когда клиент Office обнаруживает, что физическое использование памяти на устройстве превышает 80 % доступной памяти, клиент начинает мониторинг использования памяти надстройки, на уровне документа для надстроек для содержимого и области задач, а также на уровне почтового ящика для надстроек Outlook. С интервалом по умолчанию в 5 секунд клиент предупреждает пользователя, если физическое использование памяти для набора надстроек на уровне документа или почтового ящика превышает 50 %. Этот предел использования памяти рассчитан для физической, а не виртуальной памяти, и позволяет обеспечить производительность на устройствах с ограниченной оперативной памятью, таких как планшеты. Администраторы могут переопределить этот динамический параметр явным ограничением, используя раздел реестра Windows MemoryAlertThreshold в качестве глобального параметра, и настроить интервал оповещений с помощью ключа AlertInterval в качестве глобального параметра.

  • Устойчивость к сбоям. По умолчанию надстройка должна давать сбой не более четыре раз.

    Администраторы могут настраивать предельное количество сбоев с помощью раздела реестра RestartManagerRetryLimit.

  • Блокирование надстройки. Отсутствие ответа должно длиться не более 5 секунд.

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

Надстройки Outlook

Если какая-либо надстройка Outlook превышает предыдущие пороговые значения для использования ядра ЦП или памяти или предел допуска сбоев, надстройка становится недоступной. В Центре администрирования Exchange отображается состояние надстройки.

Примечание.

Несмотря на то, что только Outlook в Windows (классической) и mac отслеживают использование ресурсов, если любой из этих клиентов делает надстройку Outlook недоступной, эта надстройка также становится недоступной в Outlook в Интернете, на мобильных устройствах и в новом Outlook в Windows.

Помимо правил ядра ЦП, памяти и надежности, надстройки Outlook должны соблюдать следующие правила при активации.

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

    С помощью групповой политики или параметров приложения в реестре Windows администраторы могут настроить это пороговое значение по умолчанию в 1000 миллисекунд с помощью параметра OutlookActivationAlertThreshold.

  • Повторное вычисление регулярных выражений — ограничение по умолчанию в три раза для повторной оценки всех регулярных выражений в манифесте Outlook. Если оценка завершается сбоем все три раза из-за превышения допустимого порогового значения (значение по умолчанию составляет 1000 миллисекунда или значение, заданное outlookActivationAlertThreshold, если этот параметр существует в реестре Windows), Outlook делает надстройку недоступной. В Центре администрирования Exchange отображается состояние надстройки, и надстройка недоступна в Outlook в Интернете, в Windows (новой и классической), на Mac и на мобильных устройствах.

    С помощью групповой политики или параметра приложения в реестре Windows администраторы могут настроить это число попыток оценки, используя параметр OutlookActivationManagerRetryLimit.

Надстройки Excel

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

  • В Excel в Интернете действует ограничение в 5 МБ на размер полезных данных запросов и откликов. При превышении этого ограничения возникает ошибка RichAPI.Error.
  • Диапазон ограничен пятью миллионами ячеек для операций получения.

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

Эти ограничения обычно превышаются большими диапазонами. Ваша надстройка может использовать RangeAreas для стратегического обновления ячеек в большом диапазоне. Дополнительные сведения о работе с RangeAreasсм. в разделе Работа с несколькими диапазонами одновременно в надстройках Excel. Дополнительные сведения об оптимизации размера полезных данных в Excel см. в статье Рекомендации по ограничению размера полезных данных.

Надстройки области задач и контентные надстройки

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

  • Перезапустить надстройку.
  • Отмена дальнейших оповещений о превышении этого порогового значения. В идеале пользователь должен удалить надстройку из документа; Продолжение работы надстройки может по-прежнему риском для повышения производительности и стабильности.

Проверка проблем с использованием ресурсов в журнале телеметрии

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 Не применимо Манифест надстройки загружен успешно LinkedIn 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 для конкретного приложения содержат рекомендации по использованию API для приложений для Excel, OneNote, Visio и Word. Подводя итоги, необходимо:

Отмена отслеживания ненужных прокси-объектов

Прокси-объекты сохраняются в памяти до вызова 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();
});

Обратите внимание, что отмена отслеживания объектов становится важной только при работе с тысячами объектов. Большинству надстроек не потребуется управлять отслеживанием объектов прокси-сервера.

См. также