Кэширование приложений для приложения вкладки
Кэширование приложений сокращает время последующего запуска приложений в Teams, позволяя хранить в памяти некоторые ресурсы и ресурсы, которые можно использовать при повторном создании приложения.
Кэширование приложений поддерживается для следующих компонентов:
Scope | Версия для настольного компьютера | iOS | Android |
---|---|---|---|
Поддерживаются Доступно только в общедоступной предварительной версии для разработчиков |
Поддерживаются | Поддерживаются | |
Персональный | ✔️ Время существования кэша: 30 минут | ✔️ | ❌ |
Чат | ✔️ Время существования кэша: 30 минут | ✔️ | ❌ |
Канал | ✔️ Время существования кэша: 30 минут | ✔️ | ❌ |
Вкладка "Собрание" | ✔️ Время существования кэша: 30 минут | ✔️ | ❌ |
Боковая панель собрания или приложения для собраний | ✔️ Время существования кэша: 20 минут | ❌ | ❌ |
Включение кэширования приложений
Чтобы включить кэширование приложений, выполните следующие действия:
Вызовы
teamsCore.registerBeforeUnloadHandler
иteamsCore.registerOnLoadHandler
API.Используйте
contentUrl
иentityId
передаются в обработчик нагрузки для маршрутизации на правильную страницу в приложении и вызоваnotifySuccess
илиnotifyFailure
уведомления клиента Teams о завершении потока инициализации приложения.- contentUrl: добавление URL-адреса страницы содержимого.
- entityId: добавьте уникальный идентификатор.
Удалите ресурсы и выполните очистку
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 |
---|---|---|
Кэширование приложений | Пример приложения, чтобы показать, как работает кэширование приложений на боковой панели собрания. | Просмотр |
См. также
Platform Docs