У меня есть сервер узла, работающий локально, и я подключаюсь к этому серверу через свой веб-браузер. Я использую веб-сокет для связи между клиентом и сервером. Я хочу измерить точное время отправки сообщения websocket на сервер и с сервера. Я использую функцию javascript Date.now (), но проблема в том, что в моих результатах иногда сообщение было получено сервером до того, как оно было отправлено клиентом. Я предполагаю, что есть разница между клиентскими «часами» и серверными «часами». Но есть на той же машине. Буду признателен за пояснения и ссылки на ресурсы.
Не ожидайте, что Date.now будет точным. Большинство браузеров пропускают несколько миллисекунд ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как отметил Джон Ресиг, время javascripts в одной из его статей в блоге не является точным. Часы, к которым вы можете получить доступ с помощью javascript, «тикают» только каждые несколько миллисекунд. Это означает, что точное время может отличаться примерно на ~ 7 мс. Теперь, если ваш запрос занимает меньше этого небольшого промежутка времени (что может произойти, если он остается на локальном хосте), это может выглядеть так, как будто он был получен до его отправки.
real time: 1000ms
js time: 1000ms
travel time: 5ms
real time: 1005ms
js time: 998ms // inaccuracy
difference: -2ms
Мы не можем ничего сделать, чтобы улучшить это, поскольку performance.now() был отключен по соображениям безопасности. Итак, единственное, что мы можем сделать, это ввести сетевую задержку :), но тогда время, вероятно, будет больше ...