Neste artigo veremos os passos necessários para a criação de uma página de teste de desempenho/velocidade de sua conexão com a internet utilizando PHP, GD, HTML e javascript.
Esta é a página que fará o trabalho de enviar as informações, calcular a velocidade e apresentar o resultado na tela. Como já expliquei no início, o funcionamento e o código está comentado, não vou me prender muito a explicações aqui.
Arquivo: desempenho.php
<?
/*
TIPO DE LICENÇA: GNU/GPL
TESTE DE DESEMPENHO EM PHP
AUTOR: KEMPER ALVES DE CASTRO CARLOS <kemper@omegacodigos.com.br>
*/
?>
<html>
<head>
<title>Teste de Desempenho</title>
</head>
<body style="margin-left:100px;margin-right:100px;margin-top:10px">
<div style="width:100%; border-style:solid; border-color:rgb(200,200,200); border-width:1px">
<h1 id=titulo>Teste de Desempenho</h1>
<p><b>Atenção:</b> Feche qualquer programa que esteja utilizando a conexão antes de iniciar o teste!</script>
<p id=aguarde style="text-align: center; color: blue; font-weight: bold">Aguarde enquanto o teste é efetuado!</p>
<div id=barraprogresso style="width:96%;left: 2%; position: relative; border-style:solid; border-color:rgb(200,200,200); border-width:1px; margin-bottom:3px">
<hr align=left style="width:0%; height:20px; border-style: none; background-color:blue;" id=barra>
</div>
<?
/*
Aqui definimos qual a quantidade de kbytes
será utilizada no teste,
Utilizo 256 porque é o que mais faz o resultado
se aproximar da verdade.
Valores muito altos consomem muita cpu, provocando
atraso no processamento e consequentemente, perda de precisão.
valores muito baixos a transferência ocorre muito rapidamente,
provocando também baixa precisão no resultado.
*/
$tamanho=256;
$tamanho=1024*$tamanho;
/*
Agora vamos gerar uma string com a quantidade de dados necessário.
Note que a string é aleatória para evitar que o browser do
usuário armazene no cache.
Veja também que a cada 256 bytes é escrito o código que atualiza
a barra de progresso, e, logicamente, a quantidade de bytes
utilizado por esse código é descontado, pois ele vai junto da
string de 256K, assim continuamos enviando dados e atualizamos a barra
de progresso ao mesmo tempo :)
*/
for ($i=0; $i<$tamanho; $i++){
if ($i % 256 == 0){
$addstr="--> <script>";
$addstr.="document.getElementById(\"barra\").style.width=\"".number_format(100/$tamanho*$i,0)."\%\";";
$addstr.="</script><!-- ";
$i+=strlen($addstr); //é a quantidade de caracteres gastos para atualizar a barra
$str.=$addstr;
}else{
//Gera uma string aleatória, para evitar cache dos navegadores
$str.=chr(rand(97, 97+20));
}
}
?>
<?
/*
O script abaixo exibe a frase "aguarde o fim do teste!"
e armazena o momento exato do início do teste...
*/
?>
<script>
document.getElementById("aguarde").innerHTML="Aguarde o fim do teste!";
time=new Date();
starttime=time.getTime();
</script>
<?
/*
AGORA É TRANSFERIDA A STRING GERADA PARA O BROWSER DO USUÁRIO,
LEMBRE-SE, ELA POSSUI 256 KBYTES E ESTÁ INCLUÍDO O CÓDIGO
JAVASCRIPT PARA ATUALIZAR A BARRA DE PROGRESSO.
*/
?>
<!-- <? echo $str ?> -->
<?
/*
PRONTO! TRANSFERÊNCIA CONCLUÍDA!
AGORA ARMAZENA A HORA QUE CONCLUIU, CALCULA A TAXA DE
TRANSFERÊNCIA E CHAMA O SCRIPT:
grafico_desempenho.php
PARA GERAR O RESULTADO...
*/
?>
<script>
time = new Date();
endtime = time.getTime();
if (endtime == starttime) {
downloadtime = 0;
} else {
downloadtime = (endtime - starttime);
}
document.getElementById("aguarde").innerHTML="<a href=desempenho.php>Obtendo o Gráfico</a>";
document.getElementById("titulo").innerHTML="Teste de Desempenho Concluído";
document.getElementById("barraprogresso").innerHTML="";
document.getElementById("barraprogresso").style.borderStyle="none";
//AQUI É DESENHADO O GRÁFICO DA VELOCIDADE...
document.write("<p align=center><img align=center src=grafico_desempenho.php?velocidade="+kbitssegundo+"></p>");
document.getElementById("aguarde").innerHTML="<a href=desempenho.php>Testar Novamente</a>";
</script>
</div>
</body>
</html>
[2] Comentário enviado por m4rc310 em 04/07/2007 - 10:41h
Muito bom, gostei.
Entretando a velocidade medida será específica para o meio entre seu servidor e sua máquina fazendo download certo? Você estará medindo a velocidade da sua rede em questão.
Eu só conheço o www.numion.com/yourspeed para testar a as velocidades escolhendo países. Porém o teste é só pra navegação e não para grandes downloads.
Alguém conhece uma solução melhor e mais genérica?
[4] Comentário enviado por kemperacc em 05/07/2007 - 00:25h
marcelonovol:
Exatamente, a velocidade eh medida entre o meu servidor Web e o Meu cliente, visto que eu sou um provedor de internet, este teste atende totalmente as minhas necessidades.
[6] Comentário enviado por removido em 05/07/2007 - 23:07h
Boa noite. Estou testando o script em minha maquina mas a conexao não esta sendo medida de forma correta. Quando visualizo os logs em /var/log/apache/error_log ele me retorna a seguinte menssagem:
[Thu Jul 5 22:59:25 2007] [error] PHP Notice: Undefined variable: velocidade in /var/www/htdocs/grafico_desempenho.php on line 47
[Thu Jul 5 22:59:25 2007] [error] PHP Notice: Undefined variable: velocidade in /var/www/htdocs/grafico_desempenho.php on line 13
A vantagem dele como sempre do flash é possui a facilidade enorme de instalar e colocar para funcionar em qualquer sistema operacional e com a compatibilidade em praticamente qualquer navegador, bastando apenas copiar os arquivos em flash para qualquer pasta acessível pelo servidor web.
[15] Comentário enviado por Byfred em 12/09/2009 - 01:00h
Muito bom o script, mas com um pequeno problema,
o Internet Explorer primeiro está carregando todos os dados para depois exibi-los, ou seja, o tempo de "start" e "stop" está praticamente o mesmo, isso está fazendo o resultado ficar absurdamente grande, ou algumas vezes aparece "infinity",
Com Firefox e Chorme funcionou perfeitamente...
Aqui está o site para teste: