Nos velhos tempos do CGI, tínhamos muitos formulários que acionavam várias ações de back-end. Como notificações de texto para grupos, trabalhos de impressão, coleta de dados, etc.
Se o usuário estava em uma página que dizia "Aguarde ... Executando um trabalho ENORME que pode levar algum tempo.". Era mais provável que acertassem em REFRESH e isso seria RUIM!
PORQUE? Porque isso desencadearia mais trabalhos lentos e, eventualmente, paralisaria a coisa toda.
A solução? Permita que eles façam sua forma. Quando eles enviarem o formulário ... Comece seu trabalho e direcione-os para outra página que os diga para esperar.
Onde a página do meio realmente continha os dados do formulário necessários para iniciar o trabalho. A página WAIT, entretanto, contém uma destruição do histórico do javascript. Assim, eles podem RECARREGAR aquela página de espera o quanto quiserem e nunca acionará o job original para iniciar em segundo plano, pois essa página ESPERA contém apenas os dados do formulário necessários para a ESPERA em si.
Espero que isso faça sentido.
A função de destruição do histórico também os impedia de clicar em VOLTAR e depois atualizar também.
Foi muito perfeito e funcionou muito bem por MUITOS MUITOS anos até que a organização sem fins lucrativos foi encerrada.
Exemplo: ENTRADA DE FORMULÁRIO - Colete todas as informações e, quando enviado, aciona seu trabalho de back-end.
RESPOSTA da entrada do formulário - Retorna HTML que executa um redirecionamento para sua página de espera estática e / ou POST / GET para outro formulário (a página ESPERA).
PÁGINA DE ESPERA - Contém apenas dados de FORMULÁRIO relacionados à página de espera, bem como javascript para destruir o histórico mais recente. Como (-1 OU -2) para destruir apenas as páginas mais recentes, mas ainda permite que elas voltem para a página de entrada do FORM original.
Assim que estiverem em sua página ESPERA, eles podem clicar em ATUALIZAR o quanto quiserem e isso nunca gerará o trabalho FORM original no backend. Em vez disso, sua página WAIT deve incluir uma atualização cronometrada META para que possa sempre verificar o status de seu trabalho. Quando o trabalho é concluído, eles são redirecionados da página de espera para onde você desejar.
Se eles atualizarem manualmente ... Eles estão simplesmente adicionando mais uma verificação do status do trabalho lá.
Espero que ajude. Boa sorte.