Время NTP JavaScript

Я пишу счет script, который считает время между старой датой и сегодня.
Все работало хорошо, пока я не тестировал компьютер с неправильной датой и видел результаты.
Поэтому я нашел способ получить время NTP через http://json-time.appspot.com/time.json.
Проблема в том, что мне нужно текущее время каждые миллисекунды, потому что я хочу подсчитать миллисекунды, но его невозможно отправить запрос на сервер NTP каждые миллисекунды.
Это пример кода, чтобы увидеть, что я пишу о

            var today;
        $(document).ready(function(){

            $.data = function(success){
                $.get("http://json-time.appspot.com/time.json?callback=?", function(response){
                    success(new Date(response.datetime));
                }, "json");
            };
        });

        function update(){
            var start = new Date("March 25, 2011 17:00:00");
            //var today = new Date();
            $.data(function(time){
                today = time;
            });
            var bla = today.getTime() - start.getTime();
            $("#milliseconds").text(bla);
        }

        setInterval("update()", 1);

Ответ 1

Прежде всего, планировщик JS имеет определенную степень детализации, то есть вы можете запросить интервал меньший, чем, скажем, 20 мс, но он не срабатывает немедленно - то, что вы могли видеть, - это 20 событий, запускаемых каждые 20 мс.

Во-вторых, даже если бы вы могли, это не очень хорошая идея: вы будете делать 1000 запросов каждую секунду, с каждого компьютера, который использует этот script. Даже если клиент и их подключения могут справиться с этим, это не что иное, как DDoS для сервера JSON.

Что вы можете сделать, так это:

  • получить время от JSON-NTP (один раз), это будет дата
  • получить локальное время (один раз), это будет дата
  • вычислить разницу между NTP и локальным временем (один раз), это, вероятно, будет числом мсек, если локальное время выключено.
  • для расчета каждого времени, учитывайте разницу

Ответ 2

поместите это прямо вверху документа:

var clientTime = new Date();

и это право внизу документа:

var serverTime = new Date("<have the server put here its current date/time along its timezone>");
var deltaTime = serverTime - clientTime; // in milliseconds (expected accuracy: < 1 second)

тогда, если вам нужно знать продолжительность чего-то:

var startTime = new Date();

// [processing...]

var endTime = new Date();
var duration = endTime - startTime; // in milliseconds
var startTimeServer = startTime + deltaTime;
var endTimeServer = endTime + deltaTime;

Ответ 3

Я не уверен, что вы понимаете, что такое NTP: А именно, синхронизация внутренних часов на компьютере, а не как использование для часов в себе.

Я бы предположил, что вы один раз подключаетесь к службе NTP, чтобы получить разницу во внутреннем времени клиента и использовать его для исправления. Но я не совсем уверен, почему сравнение с временем клиентского компьютера недостаточно.