Asp – Trabalho com o buffer da página

As páginas ASP se constroem primeiro em um buffer do servidor e mais tarde se mandam ao cliente. Esta é a configuração pré-determinada de ASP 3.0, embora não fosse assim nas versões anteriores. Isto quer dizer que o código HTML que vai gerando o servidor ao processar a página ASP, vai se salvando em uma memória intermediária até que termina de se processar, momento no qual o servidor se encarrega de mandar o conteúdo do buffer.

Nota: É importante saber em qual versão de ASP estamos trabalhando. Os IIS 4.0 têm instalado ASP 2.0 por padrão e os IIS 5.0 têm ASP 3.0.

Nós podemos em certa medida controlar o envio da página ao cliente para que este se realize nos momentos que nós desejarmos. Para isto temos alguns métodos e propriedades do objeto response a nossa disposição.

Response.Buffer  é uma propriedade que se estiver true (a opção por padrão em ASP 3.0) indica ao servidorque deve utilizar o buffer. Se estiver false (opção por padrão para versões anteriores de ASP) não o utiliza.
Response.Flush método para ordenar ao servidor que mande o que tenha no buffer ao cliente.
Response.Clear método que limpa o buffer, o esvazia e perde seu conteúdo. Só é útil se estivermos utilizando o buffer
Response.End método que detém a execução da página, a termina.

Algumas utilidades

Com a propriedade buffer e os métodos anteriores poderemos implementar várias funcionalidades. Por exemplo, se uma página estiver composta por grandes blocos de processamento os quais utiliza bastante tempo podemos, entre bloco e bloco mandar ao cliente os dados que já estiverem escritos.

<%
‘Código da página lento de processar

Response.Flush ‘envio o escrito até agora

‘Outro pedaço de código da página lento de processar

Response.Flush ‘envio o escrito até agora

%>

Trabalho com cabeçalhos e texto

Também podemos com estas ferramentas evitar algum erro derivado de escrever nos cabeçalhos do HTTP depois de haver escrito na página texto ou HTML. Recordemos as cookies, foi dito quando se comentava que viajam nos cabeçalhos do HTTP e que estes são mandados ao cliente antes que o texto com o código da página. Por esta razão, todo o trabalho com as cookies há de ser realizado antes de escrever nenhum texto na página. É parecido ao que acontece com o objeto método redirect do objeto response.

Trata-se de escrever muito texto na página e logo tratar de ler uma cookie do cliente. Deveria dar um erro, mas dependerá se a página estiver ou não no buffer, pois se não estiver no buffer não foi mandado e, portanto, não escrevemos nenhum texto no cliente. Como dissemos que se mande ou não se mande dependerá da propriedade response.buffer.

Este exemplo, com response.buffer em true, funciona perfeitamente porque, embora já tivermos escrito coisas na página, não as mandamos ao cliente, porque estão no buffer.

<%
response.buffer = true
for i=0 to 1000
response.write “Workshop de ASP de criarweb.com ”
next
response.clear
response.cookies (“ppepe”) = “pqpqpqpqpqpqpqpqpq”
response.write request.cookies (“ppepe”)
%>

Com response.buffer a false o mesmo script vai dar um erro porque não se pode ler ou escrever cookies se já tivermos escrito algo na página e se mandou ao cliente. False é a opção pré-determinada em ASP 2.0 e 1.0.

<%
response.buffer = false
for i=0 to 1000
response.write “Workshop de ASP de criarweb.com ”
next
response.cookies (“ppepe”) = “pqpqpqpqpqpqpqpqpq”
response.write request.cookies (“ppepe”)
%>

Sair se o usuário foi embora

Outro exemplo interessante para ilustrar o que se pode fazer controlando os fluxos é detê-los no caso de que o cliente abandone a página. Imagine que temos um processo que requer muito processamento e o cliente vai embora da página antes de termina-lo. Para evitar todo esse tempo perdido no processamento de sua solicitação, pode-se ir comprovando à medida que vai passando o tempo se o cliente continua na espera, pois se não continuar será inútil terminar o processamento que estávamos realizando.

Para conseguir saber se o cliente continua à espera pode-se utilizar uma propriedade do objeto response chamada IsClientConnected que devolve true no caso do cliente continuar à espera e false no caso contrário. O exemplo a seguir esclarecerá tudo.

<%
‘ Processamento muito longo no tempo

if not Response.IsClientConnected then
Response.End
end if

‘ Processamento muito longo
%>

É interessante destacar que a propriedade Response.IsClientConnected não pode ser utilizada com segurança até ASP 3.0. EM ASP 2.0 foi implementada, embora não seja aconselhável usa-la porque tinha algum problema para dar resultados corretos.

Fonte: http://www.criarweb.com/artigos/440.php

Deixe um comentário