Foros del Web » Programando para Internet » PHP »

Puedo saber velocidad del usuario?

Estas en el tema de Puedo saber velocidad del usuario? en el foro de PHP en Foros del Web. Saludos !! Estaba pensando en que las animaciones Flash son estupendas cuando alguien navega con banda ancha. Pero muchas veces (si es grande), es la ...
  #1 (permalink)  
Antiguo 20/11/2005, 22:44
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 11 meses
Puntos: 1
Puedo saber velocidad del usuario?

Saludos !!

Estaba pensando en que las animaciones Flash son estupendas cuando alguien navega con banda ancha.

Pero muchas veces (si es grande), es la muerte para los de conexión telefónica.

Una vez vi, creo que en att.net que hacías click en algún lado y podías saber la velocidad de tu conexión.

¿Es posible con PHP o de alguna forma saber si el usuario tiene banda ancha y poder elegir si ponerle animaciones o saber si tiene conexión telefónica y poner sólo Gifs?

Sería grandioso !!
  #2 (permalink)  
Antiguo 20/11/2005, 22:49
Avatar de leoj90
Usuario baneado!
 
Fecha de Ingreso: agosto-2005
Mensajes: 1.365
Antigüedad: 19 años, 3 meses
Puntos: 0
Creo q esto te servirá: http://www.desarrolloweb.com/articulos/2115.php
  #3 (permalink)  
Antiguo 20/11/2005, 23:11
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 11 meses
Puntos: 1
Es perfecto man !

Gracias.
  #4 (permalink)  
Antiguo 21/11/2005, 03:50
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 19 años, 2 meses
Puntos: 0
Curioso problema, nunca me lo había planteado.

Si tuviera que resolverlo lo haría así: El server le envía al cliente (navegador) 1K de 'comentario html' (aleatorios, esto es fundamental) y es el propio cliente el que mide su velocidad (lo que tarda en llegar ese 'comentario')... y en función de ella toma una decisión: Se va a una página y otra, o bien se va a la misma página a la que pasa un valor para que sea el server el que en función de ese valor haga una cosa u otra... Sencillo y elegante.

Realmente se trata de un test de velocidad en toda regla... con una decisión final en vez de mostrar los valores numéricos.

Por cierto, en la propuesta que te han hecho, el test de velocidad de http://www.desarrolloweb.com/articulos/2115.php tiene un fallo garrafal... que invito a descubrir.


Un saludo.


Esto funciona... lo único que deberás de ajustar son los saltos (a dónde van y si pasan o no valor) y el threshold de la alta/baja velocidad. Como es obvio, también podrías cambiar el 'comentario', que es de 1K por cualquier otro (512 o 256 bytes, por ejemplo), de forma que el cliente ni se entera.

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">
    Hs=new Date();
    beg=Hs.getTime()/1000.0;
</script>
<!--<?
    $kas 
1;                //  enviará 1K 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.getTime())/1000.0) - beg;
    var dim=<? echo 1024 $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(\"bajavelocidad.php?t="+tiempo+"\")>");  
    }
    else {
        document.write("<body onload=document.location.replace(\"altavelocidad.php?t="+tiempo+"\")>");  
    }
</script>
</body>
</html>
  #5 (permalink)  
Antiguo 22/11/2005, 00:13
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 11 meses
Puntos: 1
Fenomenal !!!

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($kbps2)." 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.
  #6 (permalink)  
Antiguo 22/11/2005, 01:07
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 8 meses
Puntos: 0
curioso, gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:18.