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


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

Кэширование приложений сокращает время последующего запуска приложений в 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 при первом запуске приложения):

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

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

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

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

Примечание.

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

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

  • Если загрузка системной памяти высока, приложение удаляется из кэша.
  • Если количество кэшированных приложений превышает максимальный размер кэша, то самое старое кэшированное приложение удаляется из кэша.
  • Приложение не кэшировано, если 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;
});

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

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

Ограничения

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

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

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

  • Кэширование приложений поддерживается только в классическом клиенте Teams. В веб-клиенте Teams, даже если приложение регистрирует обработчики нагрузки, приложение удаляется из кэша unload после завершения последовательности.

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

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

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

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

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

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

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

    • initialize
    • notifyappLoaded
    • notifySuccess
    • notifyFailure
    • notifyExpectedFailure
    • getContext
    • getAuthToken
    • readyToUnload
    • getConfig/getSettings
  • Кэширование приложений не поддерживается в новом клиенте Teams.

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

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

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

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

Пример кода

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

См. также