← Назад к вопросам

Можно ли получить время точнее миллисекунд?

1.7 Middle🔥 121 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Можно ли получить время с точностью выше миллисекунд в JavaScript?

Да, в современных веб-браузерах и Node.js можно получить время с точностью выше миллисекунд. Для этого используются специальные API, позволяющие измерять время с точностью до микросекунд (1/1000 миллисекунда) или даже наносекунд (1/1000 микросекунда).

Основные API для высокоточного измерения времени

1. performance.now() - микросекундная точность

Этот метод из Performance API возвращает время с точностью до микросекунд. Он измеряет время с момента начала выполнения текущей страницы или процесса.

const startTime = performance.now();

// Выполнение какой-то операции
for (let i = 0; i < 1000000; i++) {
  // Некоторая работа
}

const endTime = performance.now();
const elapsed = endTime - startTime;

console.log(`Операция заняла ${elapsed} миллисекунд`);
// Результат может быть: "Операция заняла 12.345678 миллисекунд"

Ключевые особенности performance.now():

  • Точность обычно составляет микросекунды (десятичные части миллисекунды)
  • Не зависит от системного времени и не подвержен корректировкам часов
  • Используется для точного измерения производительности

2. performance.timeOrigin + performance.now() для абсолютного времени

Для получения абсолютного времени с высокой точностью можно использовать:

const highPrecisionTime = performance.timeOrigin + performance.now();
console.log(highPrecisionTime); // Абсолютное время с микросекундной точностью

3. process.hrtime() в Node.js - наносекундная точность

В Node.js доступна функция process.hrtime(), которая возвращает время с точностью до наносекунд.

// В Node.js
const startTime = process.hrtime();

// Выполнение операции
const result = someHeavyComputation();

const endTime = process.hrtime(startTime);
console.log(`Операция заняла ${endTime[0]} секунд и ${endTime[1]} наносекунд`);
// Пример: "Операция заняла 1 секунд и 234567890 наносекунд"

4. Web Performance API для измерения конкретных этапов

Для измерения времени конкретных этапов работы приложения можно использовать:

// Маркировка времени
performance.mark('start-operation');

// Выполнение задачи
doSomething();

performance.mark('end-operation');
performance.measure('operation-duration', 'start-operation', 'end-operation');

const measures = performance.getEntriesByName('operation-duration');
console.log(measures[0].duration); // Длительность с высокой точностью

Почему стандартный Date.now() ограничен миллисекундами?

Стандартный метод Date.now() и объект Date имеют ограничение точности до миллисекунд по нескольким причинам:

  • Исторические причины: API Date был создан давно, когда такая точность была достаточна
  • Кроссплатформенность: Не все системы предоставляют время с высокой точностью
  • Производительность: Высокоточное время часто требует более ресурсоемких операций

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

Измерение времени выполнения функции

function measureFunction(func) {
  const start = performance.now();
  func();
  const end = performance.now();
  return end - start;
}

const duration = measureFunction(() => {
  // Какая-то функция
});
console.log(`Функция выполнилась за ${duration} миллисекунд`);

Сравнение производительности двух алгоритмов

function compareAlgorithms(alg1, alg2, input) {
  const start1 = performance.now();
  alg1(input);
  const time1 = performance.now() - start1;

  const start2 = performance.now();
  alg2(input);
  const time2 = performance.now() - start2;

  console.log(`Алгоритм 1: ${time1} мс, Алгоритм 2: ${time2} мс`);
  return time1 < time2 ? alg1 : alg2;
}

Ограничения и практические советы

  1. Реальная точность зависит от браузера и системы: Не все браузеры и операционные системы предоставляют одинаковую точность
  2. Перегрузка точности: Для большинства пользовательских приложений микросекундная точность излишня
  3. Использование в профилировании: Высокоточное время наиболее полезно для профилирования производительности и оптимизации
  4. Веб-анимации и графики: При работе с canvas, WebGL или сложными анимациями высокая точность времени может быть важна

Современные тенденции

С развитием WebAssembly, высокопроизводительных веб-приложений и требований к точным измерениям производительности, API высокой точности времени становятся increasingly важными. В будущем мы можем ожидать еще более точных API времени в веб-стандартах.

Итог: Да, получить время точнее миллисекунд в современных JavaScript-окружениях можно через performance.now() (микросекунды) или process.hrtime() в Node.js (наносекунды). Эти инструменты особенно полезны для точного профилирования производительности приложений.

Можно ли получить время точнее миллисекунд? | PrepBro