Wow, pues sí que está elegante la solución !! Se ve tan sencilla, que sin saber Javascript luego luego le agarré la onda, viejo, gracias.
Justo en att.net.mx hay un link que dice PRUEBA TU VELOCIDAD y te hace descargarte una fotografía de 414,161 bytes (aproximadamente unos 400 kb) y enseguida te dice cuál es tu velocidad.
Lo hice y lo repetí varias veces, los resultados dijeron que tengo una velocidad que va de 415 kbps a 420 kbps, es decir, en un rango bastante pequeño de valores.
Luego probé tu código, ¡fabuloso! Le hice unas modificaciones minúsculas a los nombres de variable para poder identificarlas mejor.
Para efectos de la prueba, a este le llamé:
test_velocidad1.php Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="es-MX">
<META NAME="ROBOTS" CONTENT="noindex, follow">
<META HTTP-EQUIV="Expires" CONTENT="Tue, 01 Jan 1980 1:00:00 GMT">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META name="keywords" content="lo que sea" />
<META name="description" content="lo que sea" />
<title>el título</title>
<script language="javascript">
timeA=new Date();
</script>
<?
$kas = 404; // enviará 404K para medir su velocidad
$out = array();
for( $i=0; $i<$kas; $i++ ) {
$linea = "";
for( $m=0; $m<32; $m++ ) // 1K, 1.024 bytes
$linea .= md5(microtime()); // md5 son 32 bytes
$out[$i] = $linea;
}
for ($i=0;$i<=$kas;$i++)
echo $out[$i];
?>
<script language="javascript">
var timeB=new Date();
var tiempo=(timeB - timeA)/1000;
var dim=<? echo $kas; ?>;
document.write("</head>");
if ( tiempo > 0.500 ) { // Este valor (en segundos) es el threshold de la alta/baja velocidad
document.write("<body onload=document.location.replace(\"test_velocidad2.php?tiempo="+tiempo+"&kb="+dim+"\")>");
}
else {
document.write("<body onload=document.location.replace(\"test_velocidad2.php?tiempo="+tiempo+"&kb="+dim+"\")>");
}
</script>
</body>
</html>
El código llama a
test_velocidad2.php (siguiente) y muestra la velocidad a la cuál estás conectado.
Código PHP:
<?php
//se capturó por parámetro:
// $kb enviados.
// $tiempo segundos que demoró.
//nos da los kbps.
$kbps=($kb*8/$tiempo);
echo "La página se tardó $tiempo segundos en cargar.";
echo "\nVelocidad aproximada: ".number_format($kbps, 2)." kbps.";
?>
Sorprendentemente, me mostraba mi velocidad y exactamente sólo oscilaba en entre los 415kbps y 420kbps.
*Para efectos prácticos, no hay que ser tan manchado con la cantidad de bytes que le hacemos cargar al navegador del cliente, bastaría con un sólo Kb (en lugar de los 404kb que usé en la aplicación) para que al menos pudiéramos saber si el cliente se conecta con banda ancha o con baja velocidad, que inicialmente fue lo que inspiró este problema.
**Como sólo quiero saber qué tipo de información le voy a mandar al cliente según el tipo de conexión que maneja, entonces es conveniente utilizar la cláusula
if del código Javascript y desde ahí tomar la decisión.
Gracias Shockly y leoj90 por sus aportaciones.
Efectivamente Shockly, ya chequé bien el código de la página mencionada y además de estar todo rebuscado, tiene sus problemas.
Ahora sí me voy recontento a dormir, thanks.