Pergunta

Como faço para medir quanto tempo um cliente tem que esperar por um pedido.

No lado do servidor é fácil, através de um filtro, por exemplo. Mas, se quisermos levar em accout o tempo total, incluindo a latência e transferência de dados, torna-se dificil.

É possível acessar o soquete subjacente para ver quando o pedido é terminado? ou é neccessary fazer alguns truques javascript? talvez através da sincronização do relógio entre o navegador eo servidor? existem javascripts premade para esta tarefa?

Foi útil?

Solução

Não há nenhuma maneira você pode saber quanto tempo o cliente teve que esperar puramente do lado do servidor. Você vai precisar de algum JavaScript.

Você não deseja sincronizar o cliente e relógios do servidor, isso é um exagero. Apenas medir o tempo entre quando o cliente faz o pedido, e quando ele terminar de apresentar a sua resposta.

Se o cliente é AJAX, isso pode ser muito fácil:. Chamada new Date () getTime () para obter o tempo em milissegundos quando o pedido é feito, e compará-lo com o tempo após o resultado é analisado. Em seguida, enviar essa informação tempo para o servidor em segundo plano.

Para uma aplicação non-AJAX, quando o usuário clica em um pedido, utilize o JavaScript para enviar o timestamp atual (do ponto de vista do cliente) para o servidor junto com a pergunta, e passar essa mesma hora de volta através do cliente quando a página resultante é recarregado. Em manipulador onLoad dessa página, medir o tempo total transcorrido, e depois enviá-lo de volta para o servidor -. Ou usando um XMLHttpRequest ou aderência em um argumento extra para a próxima solicitação feita para o servidor

Outras dicas

Se você quiser medir-lo do seu navegador para simular qualquer solicitação do cliente pode ver o guia líquida no firebug para ver quanto tempo leva cada peça da página para fazer o download e a ordem de transferência.

Você poderia envolver o objeto HttpServletResponse eo OutputStream retornado pelo HttpServletResponse. Quando a saída começa a escrever você poderia definir um startDate, e quando ele pára (ou quando é corada etc), você pode definir um stopDate.

Isto pode ser usado para calcular o comprimento de tempo que levou para transmitir toda a volta dados para o cliente.

Estamos a usá-lo em nossa aplicação e os números parecem razoáveis.

edit: você pode definir a data de início em um ServletFilter para obter o comprimento de tempo que o cliente esperou. Eu lhe dei o período de tempo que levou para escrever a saída para o cliente.

Você pode definir um buffer de envio de socket 0 byte (e eu não exatamente recomendo este) para que quando a sua chamada de bloqueio para HttpResponse.send () você tem uma idéia mais perto de quando o último byte à esquerda, mas o tempo de viagem não está incluído. Ekk - Eu me sinto enjoado, mesmo para mencioná-lo. Você pode fazer isso no Tomcat com configurações conector específico. ( Tomcat 6 Conector documentação )

Ou você poderia vir acima com algum tipo de abordagem carimbo de tempo javascript, mas eu não esperaria para definir o relógio do cliente. Várias chamadas para o servidor web teria que ser feita.

  • timestamp consulta
  • o pedido reais
  • relatando os dados

E esta abordagem cobriria latência, embora você ainda tem alguma variação jitter.

Hmmm ... interessante problema que você tem lá. :)

Confira Jiffy-web, desenvolvido pela Netflix para dar-lhes uma forma mais visão precisa do total de páginas -> tempo de renderização de páginas

Eu tive o mesmo problema. Mas isso href="http://www.javaworld.com/javaworld/jw-11-2008/jw-11-measuring-client-response.html?page=1" rel="nofollow Papel JavaOne realmente me ajudou a resolver este problema. Gostaria de pedir-lhe para passar por isso e que basicamente usa javascript para calcular o tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top