@AE42

Как синхронизировать время между сервером и фронтендом?

У меня есть сервер, который отдает дату new Date() + 20 seconds (2021-08-11T07:18:38.085Z)
На фронтенде у меня стоит обратный отсчет от этой даты

Суть в том, что при изменении времени на компьютере увеличивается и цифра на таймере
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Пусть сервер присылает не дату, а количество секунд до истечения времени.
А на клиенте запустите setInterval каждые 1000мс. (1с)
Профит(почти).

P.s. почему почти:
1) коллбэк сработает через 1000мс только если поток документа не заблокирован другими тяжёлыми синхронными вычислениями.
2) браузеры, хром в частности, могут оптимизировать тики таймеров, если пользователь покинул вкладку(перешёл на другую или свернул браузер). Таким образом, он будет тикать не каждые 1000мс, а реже. Я такого не встречал, но, возможно, вообще не будет тикать.

По моему опыту - в рамках нескольких минут, если свернуть браузер, таймер начинал отставать на несколько секунд.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Подозреваю некие костыли aka проблему X-Y.

Защитой от накрутки пользователем времени может быть только проверка на сервере.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы