Есть ли способ получить текущее время в наносекундах с помощью JavaScript?
Итак, я знаю, что могу получить текущее время в миллисекундах, используя JavaScript. Но возможно ли вместо этого получить текущее время в наносекундах?
8 ответов
Добиться микросекундной точности в большинстве браузеров, используя:
window.performance.now()
Смотрите также:
Основываясь на ответе Джеффри, чтобы получить абсолютную метку времени (как того хотел ОП), код будет:
var TS = window.performance.timing.navigationStart + window.performance.now();
результат выражается в миллисекундах, но, как сообщается, является значением с плавающей точкой, "сточностью до одной тысячной миллисекунды".
В средах на стороне сервера, таких как Node.js, вы можете использовать следующую функцию, чтобы получить время в наносекундах
function getNanoSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000000 + hrTime[1];
}
Также получите микросекунды аналогичным образом:
function getMicSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000 + parseInt(hrTime[1] / 1000);
}
Миллисекунды с эпохи UNIX с разрешением в микросекунды.
performance.timing.navigationStart
было устаревшим! Вместо этого используйте следующее:
(performance.now() + performance.timeOrigin)
Соответствующие цитаты из спецификации
Эта спецификация определяет API, который предоставляет источник времени и текущее время с субмиллисекундным разрешением, чтобы оно не подвергалось перекосу или корректировкам системных часов.
В
timeOrigin
атрибут ДОЛЖЕН возвращатьDOMHighResTimeStamp
представляющий высокое разрешение времени от начала отсчета времени метки времени для соответствующего глобального объекта изPerformance
объект.Отсчета времени временной меткой является значением времени высокого разрешения, при котором отсчет времени равен нуль.
Источник времени - это значение времени, от которого отсчитывается время.
В
now()
метод ДОЛЖЕН возвращать текущее время высокого разрешения.Текущее время высокого разрешения является высоким временным разрешением от начала отсчета времени к настоящему времени (как правило, называют € œnowâ €).
Обратите внимание, что на самом деле это не так, что точное по соображениям безопасности (для предотвращения атак с боковым каналом)
Эта спецификация определяет API, который обеспечивает разрешение по времени менее миллисекунды, что является более точным, чем ранее доступное разрешение в миллисекундах, предоставляемое
DOMTimeStamp
. Однако даже без этого нового API злоумышленник может получить оценки с высоким разрешением путем повторного выполнения и статистического анализа. Чтобы гарантировать, что новый API не приведет к значительному повышению точности или скорости таких атак, минимальное разрешениеDOMHighResTimeStamp
type должен быть достаточно неточным, чтобы предотвратить атаки: текущее минимальное рекомендуемое разрешение составляет не менее 5 микросекунд и, при необходимости, должно быть установлено более высоким пользовательским агентом для решения проблем конфиденциальности и безопасности из-за архитектурных или программных ограничений или других соображений.
Нет. Нет шансов, что вы получите наносекундную точность на уровне JavaScript.
Если вы пытаетесь сравнить очень быструю операцию, поместите ее в цикл, который запускает ее несколько тысяч раз.
Да! Попробуйте превосходное сацзе нано-время
let now = require('nano-time');
now(); // '1476742925219947761' (returns as string due to JS limitation)
JavaScript записывает время в миллисекундах, поэтому вы не сможете получить время с такой точностью. Умный ответ - "умножить на 1 000 000".