Кэширование приложений для приложения вкладки
Кэширование приложений сокращает время последующего запуска приложений в 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
при первом запуске приложения):
Ниже приведена схема потока запуска кэшированного приложения.
При выборе кэширования приложений 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.
Вкладка AppCaching содержит следующие сведения:
- состояние: отображает кэшированное или некэшированное состояние приложения.
- isActive: отображает активное или неактивное состояние кэшированного приложения.
- timeElapsed: показывает время, затраченное с момента кэширования приложения.
-
supportsLoad: показывает, зарегистрировало ли приложение обработчик,
Load
если кэширование приложения включено. -
supportsBeforeUnload: показывает, зарегистрировано ли приложение обработчиком
BeforeUnload
, если включено кэширование приложения. - totalFrameMemory: показывает использование памяти приложением.
- totalFrameCommitMemory: показывает загрузку ЦП приложением.
Предварительное кэширование приложений вкладок
Примечание.
- Приложения с вкладками precaching доступны в общедоступной предварительной версии для разработчиков.
- Предварительное кэширование приложений табуляции поддерживается только в веб-клиентах и классических клиентах Teams.
Хотя кэширование сокращает время последующей загрузки приложения, предварительное кэширование оптимизирует время начальной загрузки приложения, позволяя Teams предварительно загрузить приложение. Teams предварительно загружает приложения в фоновом режиме после запуска или при простое в зависимости от шаблонов использования последних приложений и журнала кэша приложений. Предварительно загруженные приложения остаются в кэше до тех пор, пока пользователь не откроет приложение, что приводит к более быстрой загрузке.
Если включить предварительное кэширование, приложение использует ресурсы, а данные телеметрии отслеживаются в предварительном состоянии. Чтобы узнать, как оптимизировать приложение для предварительного кэширования, ознакомьтесь с рекомендациями.
Включение предварительного кэширования для приложения вкладки
Чтобы включить предварительное кэширование для приложения вкладки, выполните следующие действия.
Обновите манифест приложения следующим образом:
Задайте для параметра значение
showLoadingIndicator
true
. Это действие гарантирует, что Teams ожидает отправки приложенияnotifySuccess
, чтобы завершить последовательность загрузки приложения во время предварительного кэширования. Дополнительные сведения см. в разделе showLoadingIndicator.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 |
---|---|---|
Кэширование приложений | Пример приложения, чтобы показать, как работает кэширование приложений на боковой панели собрания. | Просмотр |
См. также
Platform Docs