Ну, event.timeStamp
измеряет что-то совершенно другое:
Это значение представляет собой количество миллисекунд, прошедших с начала
времени жизни текущего документа до создания события.
Если вы хотите получить точное время возникновения события, вы должны вместо этого добавить его значение в performance.timeOrigin. Обратите внимание, что последний не поддерживается Safari.
В качестве альтернативы вы можете инициировать событие самостоятельно на этапе инициализации вашего приложения, затем просто сравнить его отметку времени с Date.now()
и использовать разницу в качестве отправной точки документа. Это может быть полезно, если существует значительная задержка цикла событий, вызывающая несоответствие между теми измерениями, о которых вы беспокоитесь.
Обратите внимание, что (судя по комментариям) вы все равно можете получить некоторые колебания, поскольку некоторые браузеры имеют тенденцию быть менее точными с этими данными:
Чтобы обеспечить защиту от атак по времени и снятия отпечатков пальцев,
точность Event.timeStamp
может быть округлена в зависимости от браузера
настройки.
В Firefox предпочтение privacy.reduceTimerPrecision
включается
по умолчанию и по умолчанию 20 мкс в Firefox 59; в 60 это будет 2мс. [...]
Если вы также включите privacy.resistFingerprinting
, точность будет равна 100 мс или значение privacy.resistFingerprinting.reduceTimerPrecision.microseconds
, в зависимости от того, что больше.
Это даст точное время в миллисекундах времени, когда вызывается Date.now(). Насколько я понимаю, это может немного отличаться в миллисекундах. Я хочу ТОЧНОЕ время в миллисекундах события, в идеале до миллисекунды.
Это экспериментальная функция спецификации. Это зависит от браузера, если и как это реализовать.
Это экспериментальная функция, поэтому ее нельзя будет постоянно использовать. Есть ли способ получить точное время начала жизни текущего документа?
Обновил ответ еще раз, описав возможные подходы в этом случае - и оговорку о методах
resistFingerprinting
.Что касается уровня экспериментальности — ну, этот API должен заменить PerformanceTiming на тот, который считается устаревшим, да все еще поддерживается всеми браузерами (включая Safari).