Когда миллисекунд недостаточно — Performance.now

Таймер высокого разрешения был добавлен рабочей группой WebPerf, чтобы обеспечить более точные измерения на веб-платформе, чем те, которые мы имели с +new Date и более новым Date.now() .

Итак, для сравнения, вот какие значения вы получите обратно:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

Вы заметите, что два приведенных выше значения различаются на много порядков. performance.now() — это измерение миллисекунд с плавающей запятой с момента начала загрузки конкретной страницы (точнее, метка времени performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) ). Вы можете возразить, что это могло быть количество миллисекунд, прошедших с эпохи Unix , но веб-приложению редко требуется знать расстояние между настоящим моментом и 1970 годом. Это число остается относительно страницы, потому что вы будете сравнивать два или более измерения друг с другом.

Монотонное время

Еще одним дополнительным преимуществом является то, что вы можете рассчитывать на монотонность времени. Давайте позволим инженеру WebKit Тони Джентилкору объяснить это:

Варианты использования

Есть несколько ситуаций, когда вы можете использовать этот таймер с высоким разрешением вместо получения базовой отметки времени:

  • бенчмаркинг
  • код цикла запуска игры или анимации
  • точный расчет частоты кадров
  • указание действий или звука, которые должны происходить в определенных точках анимации или другой временной последовательности

Доступность

Таймер высокого разрешения в настоящее время доступен в Chrome (Stable) как window.performance.webkitNow() , и это значение обычно равно новому значению аргумента, переданному в обратный вызов requestAnimationFrame . Довольно скоро WebKit откажется от своего префикса , и он станет доступен через performance.now() . В частности, группа WebPerfWG, возглавляемая Джатиндером Манном из Microsoft, довольно быстро преуспела в удалении префиксов своих функций .

Таким образом, performance.now() - это...

  • двойной с микросекундами в дробном виде
  • относительно navigationStart страницы, а не эпохи UNIX
  • не перекашивается при изменении системного времени
  • доступен в стабильной версии Chrome, Firefox 15+ и IE10.
,

Таймер высокого разрешения был добавлен рабочей группой WebPerf, чтобы обеспечить более точные измерения на веб-платформе, чем те, которые мы имели с +new Date и более новым Date.now() .

Итак, для сравнения, вот какие значения вы получите обратно:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

Вы заметите, что два приведенных выше значения различаются на много порядков. performance.now() — это измерение миллисекунд с плавающей запятой с момента начала загрузки конкретной страницы (точнее, метка времени performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) ). Вы можете возразить, что это могло быть количество миллисекунд, прошедших с эпохи Unix , но веб-приложению редко требуется знать расстояние между настоящим моментом и 1970 годом. Это число остается относительно страницы, потому что вы будете сравнивать два или более измерения друг с другом.

Монотонное время

Еще одним дополнительным преимуществом является то, что вы можете рассчитывать на монотонность времени. Давайте позволим инженеру WebKit Тони Джентилкору объяснить это:

Варианты использования

Есть несколько ситуаций, когда вы можете использовать этот таймер с высоким разрешением вместо получения базовой отметки времени:

  • бенчмаркинг
  • код цикла запуска игры или анимации
  • точный расчет частоты кадров
  • указание действий или звука, которые должны происходить в определенных точках анимации или другой временной последовательности

Доступность

Таймер высокого разрешения в настоящее время доступен в Chrome (Stable) как window.performance.webkitNow() , и это значение обычно равно новому значению аргумента, переданному в обратный вызов requestAnimationFrame . Довольно скоро WebKit откажется от своего префикса , и он станет доступен через performance.now() . В частности, группа WebPerfWG, возглавляемая Джатиндером Манном из Microsoft, довольно быстро преуспела в удалении префиксов своих функций .

Таким образом, performance.now() - это...

  • двойной с микросекундами в дробном виде
  • относительно navigationStart страницы, а не эпохи UNIX
  • не перекашивается при изменении системного времени
  • доступен в стабильной версии Chrome, Firefox 15+ и IE10.
,

Таймер высокого разрешения был добавлен рабочей группой WebPerf, чтобы обеспечить более точные измерения на веб-платформе, чем те, которые мы имели с +new Date и более новым Date.now() .

Итак, для сравнения, вот какие значения вы получите обратно:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

Вы заметите, что два приведенных выше значения различаются на много порядков. performance.now() — это измерение миллисекунд с плавающей запятой с момента начала загрузки конкретной страницы (точнее, метка времени performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) ). Вы можете возразить, что это могло быть количество миллисекунд, прошедших с эпохи Unix , но веб-приложению редко требуется знать расстояние между настоящим моментом и 1970 годом. Это число остается относительно страницы, потому что вы будете сравнивать два или более измерения друг с другом.

Монотонное время

Еще одним дополнительным преимуществом является то, что вы можете рассчитывать на монотонность времени. Давайте позволим инженеру WebKit Тони Джентилкору объяснить это:

Варианты использования

Есть несколько ситуаций, когда вы можете использовать этот таймер с высоким разрешением вместо получения базовой отметки времени:

  • бенчмаркинг
  • код цикла запуска игры или анимации
  • точный расчет частоты кадров
  • указание действий или звука, которые должны происходить в определенных точках анимации или другой временной последовательности

Доступность

Таймер высокого разрешения в настоящее время доступен в Chrome (Stable) как window.performance.webkitNow() , и это значение обычно равно новому значению аргумента, переданному в обратный вызов requestAnimationFrame . Довольно скоро WebKit откажется от своего префикса , и он станет доступен через performance.now() . В частности, группа WebPerfWG, возглавляемая Джатиндером Манном из Microsoft, довольно быстро преуспела в удалении префиксов своих функций .

Таким образом, performance.now() - это...

  • двойной с микросекундами в дробном виде
  • относительно navigationStart страницы, а не эпохи UNIX
  • не перекашивается при изменении системного времени
  • доступен в стабильной версии Chrome, Firefox 15+ и IE10.
,

Таймер высокого разрешения был добавлен рабочей группой WebPerf, чтобы обеспечить более точные измерения на веб-платформе, чем те, которые мы имели с +new Date и более новым Date.now() .

Итак, для сравнения, вот какие значения вы получите обратно:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

Вы заметите, что два приведенных выше значения различаются на много порядков. performance.now() — это измерение миллисекунд с плавающей запятой с момента начала загрузки конкретной страницы (точнее, метка времени performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) ). Вы можете возразить, что это могло быть количество миллисекунд, прошедших с эпохи unix , но веб-приложению редко требуется знать расстояние между настоящим моментом и 1970 годом. Это число остается относительно страницы, потому что вы будете сравнивать два или более измерения друг с другом.

Монотонное время

Еще одним дополнительным преимуществом является то, что вы можете рассчитывать на монотонность времени. Давайте позволим инженеру WebKit Тони Джентилкору объяснить это:

Варианты использования

Есть несколько ситуаций, когда вы можете использовать этот таймер с высоким разрешением вместо получения базовой отметки времени:

  • бенчмаркинг
  • код цикла запуска игры или анимации
  • точный расчет частоты кадров
  • указание действий или звука, которые должны происходить в определенных точках анимации или другой временной последовательности

Доступность

Таймер высокого разрешения в настоящее время доступен в Chrome (Stable) как window.performance.webkitNow() , и это значение обычно равно новому значению аргумента, переданному в обратный вызов requestAnimationFrame . Довольно скоро WebKit откажется от своего префикса , и он станет доступен через performance.now() . В частности, группа WebPerfWG, возглавляемая Джатиндером Манном из Microsoft, довольно быстро преуспела в удалении префиксов своих функций .

Таким образом, performance.now() - это...

  • двойной с микросекундами в дробном виде
  • относительно navigationStart страницы, а не эпохи UNIX
  • не перекашивается при изменении системного времени
  • доступен в стабильной версии Chrome, Firefox 15+ и IE10.