Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

110
Visualizações
Establecer tiempo de espera en el problema de rendimiento de javascript

Problema

Estoy construyendo una herramienta de simulación de algoritmos para simular cómo funcionan los algoritmos. En el algoritmo BFS , quería ralentizar la visualización de resultados

Así que usé la función setTimeout después de cada paso para esperar unos 10 ms antes de pasar al siguiente paso. Utilicé la promise de poder usar async para esperar fácilmente todo el período y obligar al algoritmo a detenerse hasta que finalice la función de espera.

implementación de funciones

 function wait(time) { return new Promise(resolve => { setTimeout(() => { resolve(); }, time); }) }

BFS

 while (queue.length) { let currentId = queue[index++]; let tile = board.tileOf(currentId); tile.visit(); if (currentId == targetId) { return; } await wait(10); for (let direction of DIRECTIONS) { let childId = moveId(currentId, direction); if (childId == undefined) continue; childId = parseInt(childId); let child = board.tileOf(childId); if (child.available()) { child.visit(true); queue.push(childId); pervNode[childId] = currentId; } } }

el problema es que cuando ejecuto el código funciona bien, pero a veces toma mucho tiempo mostrar la solución más y más de 10 ms.

Me pregunto por qué no es exacto. ¿Esto se debe al enfoque que estoy usando? y si hay una solución mejor, ¿cuál podría ser?

Pruebe la herramienta desde aquí

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Como JavaScript es un lenguaje de subproceso único, cuando realiza una llamada de función dentro de setTimeout() , esta función se pone en cola y espera hasta que otras funciones en una pila de llamadas (que fueron llamadas antes) finalicen y la pila de llamadas se vacía . El tiempo que especifica como segundo parámetro para setTimeout() comienza a contar desde el momento en que coloca la función en la cola, pero no siempre la cola está vacía

about 4 years ago · Juan Pablo Isaza Relatório

0

no sé la salida real, pero creo que podría funcionar

 while (queue.length) { let currentId = queue[index++]; let tile = board.tileOf(currentId); tile.visit(); if (currentId == targetId) { return; } let timer; const loop = () => { for (let direction of DIRECTIONS) { let childId = moveId(currentId, direction); if (childId == undefined) continue; childId = parseInt(childId); let child = board.tileOf(childId); if (child.available()) { child.visit(true); queue.push(childId); pervNode[childId] = currentId; } } }; const listener = () => { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { loop(); }, 100); }; listener(); }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda