Estoy creando una aplicación de ajedrez en vivo y estoy tratando de agregarle un temporizador. Sin embargo, estoy luchando por encontrar una manera de hacer que el temporizador sea preciso. Realicé algunas pruebas, y setInterval y setTimeout son extremadamente imprecisos, con un tiempo de espera de diez minutos con una diferencia de más de tres minutos. También intenté usar setInterval con un intervalo de 100 ms, pero incluso eso se desactivó por más de un minuto, cuando la pestaña no estaba activa. Eso fue solo con javascript window.setInterval ; con nodejs, no ha habido más de 10 ms, pero me temo que lo hará si el servidor está ocupado. Espero encontrar una manera de que el juego termine en al menos una décima de segundo del tiempo real.
¿Alguna sugerencia? ¡Gracias!
un enfoque ideal sería usar el tiempo de reloj absoluto para obtener el tiempo transcurrido y el temporizador para tener esa verificación.
Algo así como el código de abajo.
const startTime = new Date(); const maxTime = 5 * 1000; // 60 seconds setInterval(() => { checkExpired(); }, 300); function checkExpired() { const curTime = new Date(); timeDifference = Math.abs(curTime.getTime() - startTime.getTime()); if (timeDifference > maxTime) { console.log("time up"); } }El navegador no ejecutará setInterval según sea necesario debido a razones de rendimiento. https://usefulangle.com/post/280/settimeout-setinterval-on-inactive-tab
Si necesita ejecutar el temporizador con el intervalo requerido, puede ejecutarse en el subproceso de trabajo.
algo de información aquí. ¿Cómo puedo hacer que setInterval también funcione cuando una pestaña está inactiva en Chrome?
Pero supongo que una mayor granularidad está bien para una pestaña no activa.