Производительность: метод 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 продолжают работать во время сна. Соответствующие ошибки браузера для других операционных систем:
Дополнительные сведения также можно найти в проблеме спецификации 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 |
См. также
© 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