Spec-Zone.ru › Web APIs

API вычисления давления

Доступ ограничен

Эта функция не соответствует Baseline, так как она не работает в некоторых наиболее широко используемых браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Экспериментальная функция: Это экспериментальная технология
Перед использованием в рабочей среде внимательно изучите таблицу совместимости с браузерами.

Примечание: Эта функция доступна в Web Workers, за исключением Service Workers.

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.

API вычисления давления — это JavaScript-API, которое позволяет наблюдать за нагрузкой системных ресурсов, таких как процессор.

Примеры использования

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

Вы можете использовать эти сигналы изменений нагрузки, например, для уменьшения или увеличения качества видео или количества отображаемых видеопотоков одновременно, чтобы избежать пропусков кадров видео, прерываний звука или задержек других критически важных частей приложения. Качество обслуживания вашего веб-приложения может варьироваться также из-за нагрузки от внешних факторов и приложений в неожиданные моменты, но в идеале это не должно приводить к полной неисправности системы, задержкам ввода или неотзывчивости. Вместо этого набор включённых функций и их уровень качества балансируются с нагрузкой на ресурсы устройства конечного пользователя. Это похоже на сетевую нагрузку, в которой случае приложение потоковой передачи адаптируется к доступной пропускной способности.

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

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

Концепции и использование

Быстрые и удобные веб-приложения должны балансировать рабочую нагрузку, когда системные ресурсы вычислений используются на (почти) полной мощности. Цель API вычисления давления — предотвратить, а не смягчить, плохой пользовательский опыт в самом веб-приложении, а также предотвратить перегрев устройства пользователя, чрезмерный шум или нежелательное разряд батареи. Поэтому рекомендуется использовать этот API вместо механизмов обратной связи или отдельных корректировок производительности (например, уменьшением частоты window.requestAnimationFrame), где плохой пользовательский опыт может быть смягчён, но не предотвращён проактивно. Для измерения и сегментации производительности сеансов пользователей после факта API PerformanceLongTaskTiming лучше подходит для анализа задач, которые занимают поток пользовательского интерфейса на 50 миллисекунд или более (см. также API производительности для дополнительных API измерения производительности).

Типы источников нагрузки

В вашем веб-приложении или веб-сайте разные задачи конкурируют за время обработки различных процессорных блоков (CPU, GPU и других специализированных процессорных блоков). Текущая версия спецификации API вычисления давления определяет два основных типа источников, которые можно запросить для получения информации о нагрузке:

  • "thermals" представляет глобальное тепловое состояние всей системы.
  • "cpu" представляет среднюю нагрузку центрального процессора (CPU) по всем его ядрам. Это состояние может быть повлияно другими приложениями и сайтами, отличными от сайта-наблюдателя.

Список поддерживаемых источников варьируется в зависимости от браузера, операционной системы и аппаратного обеспечения и развивается. Используйте статический подсказку PressureObserver.knownSources, чтобы увидеть, какие типы источников доступны вашему браузеру. Обратите внимание, что доступность также может варьироваться в зависимости от вашей операционной системы и аппаратного обеспечения. Вызовите observe() и проверьте наличие NotSupportedError , чтобы узнать, возможно ли наблюдение за нагрузкой.

API вычисления давления доступен в следующих контекстах:

  • Window (главный поток)
  • Worker
  • SharedWorker
  • <iframe> (если предоставлен подходящий Permissions-Policy)

Состояния нагрузки

API вычисления давления предоставляет состояния нагрузки высокого уровня, абстрагируясь от сложностей системных узких мест, которые нельзя адекватно объяснить с помощью метрик низкого уровня, таких как тактовая частота процессора и использование. Фактически, метрики использования процессора часто вводят в заблуждение. Поэтому API вычисления давления использует понятные пользователю состояния нагрузки со следующей семантикой (см. также спецификацию):

  • ⚪ "nominal": Состояние целевого устройства находится на приемлемом уровне, без заметного негативного влияния на пользователя.
  • 🟢 "fair": Нагрузка на целевое устройство, температура и/или энергопотребление немного повышены, что может привести к снижению времени работы от батареи, а также к активации и слышимости вентиляторов (или систем с вентиляторами). Помимо этого, целевое устройство работает безупречно и может взять на себя дополнительную работу.
  • 🟡 "serious": Нагрузка на целевое устройство, температура и/или энергопотребление постоянно очень высоки. Система может использовать сброс частоты в качестве меры противодействия для снижения температуры.
  • 🔴 "critical": Температура целевого устройства или системы значительно повышена, и требуется охлаждение, чтобы избежать возможных проблем.

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

Учёт безопасности и конфиденциальности

API вычисления давления управляется политикой с помощью директивы "compute-pressure". Её значение по умолчанию — 'self', что разрешает использование в вложенных фреймах одного источника, но предотвращает использование функции сторонним контентом.

Справочник

Интерфейсы

В API вычисления давления присутствуют следующие интерфейсы, и структура API аналогична другим наблюдателям, таким как IntersectionObserver, MutationObserver или PerformanceObserver.

PressureObserver Экспериментальный

Уведомляет о изменениях системной нагрузки для указанного числа источников (например, процессора) с заданным интервалом выборки.

PressureRecord

Описывает тенденцию нагрузки в конкретный момент перехода.

Директива Permissions-Policy

Permissions-Policy; директива compute-pressure

Управляет доступом к API вычисления давления.

Примеры

Запись текущей нагрузки

В этом примере создаётся PressureObserver и выполняется действие всякий раз, когда происходит изменение нагрузки. Интервал выборки установлен в 1000 мс, что означает, что обновления будут происходить не чаще, чем раз в секунду.

function callback(records) {
  const lastRecord = records[records.length - 1];
  console.log(`Current pressure ${lastRecord.state}`);
  if (lastRecord.state === "critical") {
    // disable video feeds
  } else if (lastRecord.state === "serious") {
    // disable video filter effects
  } else {
    // enable all video feeds and filter effects
  }
}

try {
  const observer = new PressureObserver(callback);
  await observer.observe("cpu", {
    sampleInterval: 1000, // 1000ms
  });
} catch (error) {
  // report error setting up the observer
}

Спецификации

Спецификация
Уровень 1 API вычисления давления
# the-pressureobserver-object

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
PressureObserver 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет
Compute_Pressure_API 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет
disconnect 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет
knownSources_static 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет
observe 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет
takeRecords 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет
unobserve 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет

См. также

  • Демонстрация Compute Pressure, использующая множества Мандельброта и рабочие процессы для создания искусственного давления в тестовых целях.

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Compute_Pressure_API

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API