Я пытаюсь создать таймер обратного отсчета, основанный на времени на сервере.
Изначально сервер установил оставшееся время и просто сделал setTimeout
на 1 секунду, что уменьшило время.
Я нашел 2 проблемы с этим:
- Сервер устанавливает время до рендеринга клиентской страницы и запуска JavaScript с задержкой. Величина задержки зависит от скорости интернет-соединения пользователя и компьютера/JavaScript-движка.
- Я думаю, что
setTimeout
из 1 секунды, возможно, немного отставали на более медленных компьютерах.
Я изменил его, чтобы сервер устанавливал время окончания, а JavaScript на клиенте брал время (в формате UTC) и вычислял оставшееся время. Затем он будет делать это при каждом обратном вызове setTimeout
. Это делает время и обратный отсчет идеальными. Если у клиента быстрый компьютер/движок JavaScript, таймер остается на странице. Если компьютер/JavaScript-движок работает медленнее, вы можете заметить, что здесь и там пропущена секунда, но время никогда не сбивается.
Я нашел 1 проблему с этим методом до сих пор:
- Часы каждого клиента могут быть разными.
Таким образом, оставшееся время может составлять пару секунд, или 30 секунд, или даже выходных дней, если время клиента неправильно установлено на его компьютере.
Есть ли способ, чтобы оставшееся время было точным в зависимости от даты окончания сервера?