Spec-Zone.ru › Web APIs

Производительность: метод now()

Базовая линия Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.

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

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

Метод performance.now() возвращает отметку времени высокой точности в миллисекундах. Она представляет собой время, прошедшее с момента Performance.timeOrigin (время начала навигации в контекстах окна или время запуска потока в контекстах Worker и ServiceWorker).

Синтаксис

now()

Параметры

Нет.

Возвращаемое значение

Возвращает DOMHighResTimeStamp в миллисекундах.

Описание

Performance.now по сравнению с Date.now

В отличие от Date.now, отметки времени, возвращаемые performance.now(), не ограничены разрешением в одну миллисекунду. Вместо этого они представляют время как числа с плавающей запятой с точностью до микросекунд.

Также, Date.now() может быть подвержен влиянию системных и пользовательских настроек часов, смещения часов и т. д., так как он относит ко времени эпохи Unix (1970-01-01T00:00:00Z) и зависит от системных часов. Метод performance.now() с другой стороны, относиться к свойству timeOrigin, которое является монотонными часами: текущее время никогда не уменьшается и не подвергается изменениям.

performance.now изменения спецификации

Семантика метода performance.now() изменилась между уровнем 1 и уровнем 2 Высокоточных времен.

Изменения Уровень 1 Уровень 2
Относительно performance.timing.navigationStart Performance.timeOrigin
Условия срабатывания Загрузка или завершение документа (при наличии). Создание контекста просмотра (если нет предыдущего документа), завершение загрузки (если имеется) или начало навигации (как определено в HTML, несколько шагов до загрузки).

Метод performance.now() раньше относился к свойству performance.timing.navigationStart из спецификации времени навигации. Это изменилось, и performance.now() теперь относится к Performance.timeOrigin, что избегает рисков изменения часов при сравнении отметки времени на разных страницах.

// Level 1 (clock change risks)
currentTime = performance.timing.navigationStart + performance.now();

// Level 2 (no clock change risks)
currentTime = performance.timeOrigin + performance.now();

Работа во время сна

Спецификация (уровень 2) требует, чтобы performance.now() работала во время сна. Похоже, что только Firefox на Windows и Chromium на Windows продолжают работать во время сна. Соответствующие ошибки браузера для других операционных систем:

  • Chrome/Chromium (ошибка)
  • Firefox (ошибка)
  • Safari/WebKit (ошибка)

Дополнительные сведения также можно найти в проблеме спецификации hr-time#115.

Требования безопасности

Для защиты от атак по времени и отпечатков пальцев, performance.now() грубо округляется в зависимости от того, изолирован ли документ между источниками.

  • Разрешение в изолированных контекстах: 5 микросекунд
  • Разрешение в неизолированных контекстах: 100 микросекунд

Вы можете использовать свойства Window.crossOriginIsolated и WorkerGlobalScope.crossOriginIsolated, чтобы проверить, изолирован ли документ между источниками:

if (crossOriginIsolated) {
  // Use measureUserAgentSpecificMemory
}

Примеры

Использование performance.now()

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

const t0 = performance.now();
doSomething();
const t1 = performance.now();
console.log(`Call to doSomething took ${t1 - t0} milliseconds.`);

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

Спецификация
Высокоточные время
# dom-performance-now

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

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
now 2421–24 12
15["В Firefox 57.0.4 точность была снижена до 20 микросекунд.", "В Firefox 59 точность была снижена до 2 миллисекунд.", "В Firefox 60 точность была увеличена до 1 миллисекунды."]
15 8 25
15["В Firefox для Android 57.0.4 точность была снижена до 20 микросекунд.", "В Firefox для Android 59 точность была снижена до 2 миллисекунд.", "В Firefox для Android 60 точность была увеличена до 1 миллисекунды."]
14 9 1.5 4.4

См. также

  • Performance.timeOrigin

© 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/Performance/now

Spec-Zone.ru

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