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


Кэширование приложений для приложения вкладки

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

Кэширование приложений поддерживается для следующих компонентов:

Scope   Версия для настольного компьютера iOS Android
Персональный ✔️ Время существования кэша: 30 минут ✔️
Чат ✔️ Время существования кэша: 30 минут ✔️
Канал ✔️ Время существования кэша: 30 минут ✔️
Вкладка "Собрание" ✔️ Время существования кэша: 30 минут ✔️
Боковая панель собрания или приложения на собрании ✔️ Время существования кэша: 20 минут

Включение кэширования приложений

Чтобы включить кэширование приложений, выполните следующие действия:

  1. Вызовы teamsCore.registerBeforeUnloadHandler и teamsCore.registerOnLoadHandler API.

  2. Используйте contentUrl и entityId передаются в обработчик нагрузки для маршрутизации на правильную страницу в приложении и вызова notifySuccess или notifyFailure уведомления клиента Teams о завершении потока инициализации приложения.

    • contentUrl: добавление URL-адреса страницы содержимого.
    • entityId: добавьте уникальный идентификатор.
  3. Удалите ресурсы и выполните очистку beforeUnload , необходимую в обработчике, а затем вызовите обратный readyToUnload вызов, чтобы уведомить клиента Teams о том, что поток выгрузки приложения завершен.

Ниже приведена блок-схема первого запуска приложения, которое хочет принять участие в кэшировании приложения (зарегистрируйте load или beforeUnload при первом запуске приложения):

Снимок экрана: поток первого запуска приложения на боковой панели собрания.

Ниже приведена схема потока запуска кэшированного приложения.

Снимок экрана: поток кэшированного запуска приложения на боковой панели собрания.

При выборе кэширования приложений iframe или webview, используемый для размещения внедренного приложения, повторно используется при переходе пользователей к разным экземплярам приложения в окне. Iframe или webview, используемый для размещения приложения, скрыт, когда пользователи покидают приложение, и отображается, когда пользователи возвращаются в приложение.

Примечание.

Если кэширование приложения не включено, iframe или webview создается повторно при каждом запуске приложения пользователем.

Существует несколько причин для того, чтобы приложение не кэшировано или приложение было удалено из кэша. Некоторые из причин: (номера здесь могут быть изменены):

  • Если загрузка системной памяти высока, приложение удаляется из кэша.
  • Если количество кэшированных приложений превышает максимальный размер кэша, то самое старое кэшированное приложение удаляется из кэша.
  • Приложение не кэшировано, если Teams не получает readyToUnload сигнал от приложения в течение 30 секунд после отправки beforeUnload уведомления.
  • Кэширование приложений отключено, если системная память меньше 4 ГБ или объем доступной памяти меньше 1 ГБ в Windows или 512 МБ в Mac.
  • Боковая панель — это единственный поддерживаемый frameContext для кэширования приложений в собраниях.
  • Кэширование приложений не поддерживается для собраний, где число приглашенных пользователей превышает 20.
  • Если приложение не загружается, оно не кэшировано.
  • В iOS при завершении работы приложения Teams приложение удаляется из кэша.

Пример кода

Следующий фрагмент кода является примером teamsCore.registerOnLoadHandler API и teamsCore.registerBeforeUnloadHandler :

microsoftTeams.teamsCore.registerOnLoadHandler((data) => {
    console.log("got load from TEAMS", data.contentUrl, data.entityId);
    // use contentUrl to route to correct page 
    // invoke notifySuccess when ready  
    app.notifySuccess();
});
microsoftTeams.teamsCore.registerBeforeUnloadHandler((readyToUnload) => {
    // dispose resources and then invoke readyToUnload
    readyToUnload();
    return true;
});

Средство отладки для кэшированных приложений

Примечание.

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

Вы можете включить Proto Task Manager в Teams, средстве отладки, которое показывает состояние кэшированных приложений. В клиенте Teams выберите клавиши CONTROL+SHIFT+ALT+8 в Windows или COMMAND+SHIFT+OPTION+8 в Mac, чтобы открыть диспетчер задач Proto.

Снимок экрана: вкладка кэширования в диспетчере задач Proto в Teams.

Вкладка AppCaching содержит следующие сведения:

  • состояние: отображает кэшированное или некэшированное состояние приложения.
  • isActive: отображает активное или неактивное состояние кэшированного приложения.
  • timeElapsed: показывает время, затраченное с момента кэширования приложения.
  • supportsLoad: показывает, зарегистрировало ли приложение обработчик, Load если кэширование приложения включено.
  • supportsBeforeUnload: показывает, зарегистрировано ли приложение обработчиком BeforeUnload , если включено кэширование приложения.
  • totalFrameMemory: показывает использование памяти приложением.
  • totalFrameCommitMemory: показывает загрузку ЦП приложением.

Предварительное кэширование приложений вкладок

Примечание.

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

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

Включение предварительного кэширования для приложения вкладки

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

  1. Включите кэширование приложений.

  2. Обновите манифест приложения следующим образом:

    1. Задайте для параметра значение showLoadingIndicatortrue. Это действие гарантирует, что Teams ожидает отправки приложения notifySuccess , чтобы завершить последовательность загрузки приложения во время предварительного кэширования. Дополнительные сведения см. в разделе showLoadingIndicator.

    2. backgroundLoadConfiguration Добавьте объект и определите contentUrl.

      {
      "backgroundLoadConfiguration": {
          "tabConfiguration": {
              "contentUrl": "https://www.contoso.com/content?host=msteams&isBackgroundLoad=true"
              }
          }
      }
      

      Примечание.

      • Не contentUrl может содержать контекстные параметры, такие как URL-адрес сайта группы или идентификатор потока, так как Teams загружает приложения без предварительного контекста во время запуска.
      • Объект contentUrl должен быть достаточно универсальным для загрузки в фоновом режиме без какого-либо взаимодействия с пользователем.

      Дополнительные сведения см. в разделе backgroundLoadConfiguration.

Мониторинг фоновой загрузки

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

Отслеживайте isBackgroundLoad свойство в контексте приложения, чтобы оптимизировать приложение для эффективной загрузки и отрисовки предварительного кода. Дополнительные сведения см. в разделе isBackgroundLoad.

Лучшие методики

Ниже приведены рекомендации по кэшированию и предварительному кэшированию приложений.

  • Рекомендуется реализовать возможности веб-хранилища или рабочей роли службы для локального хранения данных или веб-представления. Это помогает быстрее загружать приложение при последующих запусках.

  • Зарегистрируйте обработчики beforeUnload и onLoad сразу после вызова app.initialize и перед отправкой приложением notifySuccess. Если клиент Teams не видит эти регистрации до того, как пользователь покинет приложение, приложение не кэшировано.

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

  • Убедитесь, что приложение использует меньше или равно 130 МБ памяти в предварительном состоянии.

Ограничения

Ниже приведены ограничения для кэширования приложений.

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

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

  • Клиент Teams вызывает loadHandler только после unload завершения последовательности приложения. Например, если пользователь запускает вкладку A приложения, а затем запускает вкладку B того же приложения, вкладка B не будет получать сигнал нагрузки, пока вкладка A не вызовет обратный readyToUnload вызов.

  • Приложения кэшируются по каждому окну. Кэширование приложений выполняется для каждого приложения (не для каждой вкладки) в одном окне.

  • Кэширование приложений не поддерживается для контекстов этапа собрания или диалога (называемого модулем задач в TeamsJS версии 1.x), так как их можно открыть поверх вкладки, а один и тот же iframe или webview нельзя использовать для отображения содержимого на вкладке и в диалоговом окне.

  • Регистрируйте только beforeUnload обработчик, если приложению не требуется кэширование приложения, но требуется время для безопасного сохранения состояния (так как выход из приложения может привести к резкому удалению содержимого приложения из модели DOM). Если приложение не зарегистрировано для load события, оно удаляется из модели DOM после unload завершения потока.

  • Следуйте рекомендациям в этом разделе, чтобы подключить приложение к кэшированию приложений в собрании Teams. Для поддержки кэширования приложений только в собраниях зарегистрируйте обработчики load или beforeUnload , если контекст имеет значение sidePanel.

  • Ожидается, что приложения будут работать в спящем режиме при кэшировании (используют минимальные вычислительные или сетевые ресурсы и сводят к минимуму запросы пакета SDK). При кэшировании приложения разрешены все обработчики регистрации и следующие запросы пакета SDK:

    • initialize
    • notifyappLoaded
    • notifySuccess
    • notifyFailure
    • notifyExpectedFailure
    • getContext
    • getAuthToken
    • readyToUnload
    • getConfig/getSettings

Устранение неполадок

Приложения не кэшируются? Почему обработчик загрузки не вызывается при последующей навигации?

  • Проверьте, выполнены ли системные и доступные ограничения памяти.

  • Уменьшите объем памяти при кэшировании. beforeUnload Используйте обработчик для удаления ресурсов, например для выпуска ссылок и удаления прослушивателей событий, которые могут не потребоваться при кэшировании.

Пример кода

Название примера Описание Node.js
Кэширование приложений Пример приложения, чтобы показать, как работает кэширование приложений на боковой панели собрания. Просмотр

См. также