segunda-feira, 5 de março de 2007

Enviando o HTML para o navegador aos poucos

[Hoje sem o cumprimento padrão aos queridos freqüentadores do blog]

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

 
BlogBlogs.Com.Br