Neste post vou contar um pouco sobre um problema que eu tive e a solução que eu cheguei.
Eu desenvolvi um pequeno sistema onde é possível fazer consultas a diversas bases de dados com parâmetros diferentes e recuperar todos os resultados juntos, como se eles estivessem todos na mesma tabela do banco.
O problema que eu encontrei é que o servidor web não estava "querendo" processar a página quando a consulta retornava muitos registros. Também ninguém pode culpá-lo, pois ele sempre armazena todo o resultado em buffer antes de enviar para o navegador. Como o buffer chegava a um tamanho absurdo ele "deixava pra lá" hehe.
A solução que eu encontrei foi liberar o resultado aos poucos, assim o script não ia esperar acabar a execução toda para enviar os resultados para o navegador.
Ah Felipe, legal essa hein! É verdade, é muito legal mesmo :D
No PHP existe o método flush() que envia o conteudo armazenado até o momento de sua chamada para o servidor e o descarta logo após o envio.
Exemplo Felipe, exemplo!
<?
// aqui entra seu loop de registros
foreach ($registros as $linha) {
?>
<tr>
<td><?=$linha["nome"]?></td>
</tr>
<?
flush();
}
?>
No exemplo acima o script enviará o que está armazenado no buffer de saída do servidor para o navegador a cada registro. Este script está enviando o buffer de 1 em 1, mas você até pode encontrar melhores resultados deixando o buffer "encher" mais um pouco antes de enviar - 20 em 20, 50 em 50, etc, etc ,etc...
Ok então. Espero que isso possa ser útil para vocês e, como sempre, a seção de comentários espera :D
Nenhum comentário:
Postar um comentário