Мне интересно, не предвижу ли я что-то, что могло бы быть проблемой с моим подходом.
class RDate {
constructor(serverIsoDate) {
this.serverDate = new Date(serverIsoDate);
this.localDate = new Date();
this.localTick = performance.now();
}
getCompensatedDate() {
return this.serverDate.getTime() + (performance.now()-this.localTick);
}
}
Я периодически получаю serverDate, но если пользователь оставляет веб-приложение запущенным в течение длительного времени, яможет гарантировать правильное время, даже если пользователь подделывает свои часы.
Переполняется ли performance.now или приостанавливается, когда вкладка приостанавливается?
Я могу определить, насколько часы сместились или были подделанывычисление разницы между localDate и localTick
_spoofed() {
return Math.abs(this.localDate.getTime() - this.localTick - (Date.now() - performance.now())) > 1000 * 60 * 60;
}