У меня есть сайт аукциона, на котором отсчитывается таймер javascript. По какой-то причине через 15-20 минут этот таймер откладывает фактическое время на 20-30 секунд. В течение 1 часа таймер обратного отсчета javascript может быть отключен по крайней мере на 2-3 минуты. Это смущает пользователей, поскольку он считает, что на аукцион еще осталось 2-3 минуты. Когда страница загружается, сервер дает оставшееся время для аукциона, которое составляет менее 2 часов, а javascript начинает отсчет оттуда. Поэтому мой вопрос: 1) Почему таймер обратного отсчета javascript отстает от фактического времени на несколько секунд до минут через 20-30 минут? 2) как я могу обеспечить синхронизацию таймера. Я не хочу использовать ajax, чтобы получить оставшееся время, так как есть много других запусков ajax. Мой сервер использует Php.
Ваш таймер отстает, потому что вы используете setTimeout()
или setInterval()
. Им нельзя доверять. Вместо этого используйте объект Date
чтобы получить точное текущее время.
Вам не нужно синхронизировать. Просто поставьте время окончания аукциона (в формате UTC) в переменную даты и рассчитывайте на нее.
Время Javascript, вероятно, отстает от многих других вещей, которые происходят в вашем javascript. Многое зависит от вашей конкретной реализации таймера, но Javascript однопоточный, поэтому любая другая операция задерживает ваш таймер.
Единственный способ синхронизации с сервером – отправить запрос. Вы не можете это устранить. Но вы можете отправлять запросы только после некоторого количества отсчетов, а не каждый раз. Например, каждую минуту, когда таймер выполняет, он отправляет запрос AJAX для синхронизации. Экспериментируя, вы можете найти правильный период синхронизации.