2010-12-28 10 views

Respuesta

16

No sabe de cualquier utilidad o el API estándar, no, pero se puede Haga esto al tener varias imágenes de varios tamaños en su sitio web, y luego recuperándolas omitiendo el caché y viendo cuánto tardan en cargar. Esa información, junto con el tamaño de la imagen, le da una indicación de la velocidad entre los dos puntos finales.

El motivo por el que se utilizan varias imágenes es que se debe comenzar de forma pequeña (digamos, 20k), pero si la conexión es rápida, obtendrá un número muy inexacto; de modo que, según la velocidad con la que cargue esa imagen, querrá seleccionar otra imagen del tamaño adecuado para tratar de tener una mejor idea del ancho de banda real (a diferencia de la latencia que configura la conexión y demás).

Puede hacerlo solo con JavaScript directo, agregando img etiquetas fuera de la página con una cadena de consulta única para omitir el almacenamiento en caché; pero como ha etiquetado su pregunta "jQuery", puede que le resulte más conveniente usar the .ajax function (con su configuración cache: false) en su lugar.

El número de marcado rápido a subir con sólo una indicación, ya que otras cosas podrían ir en ese estropear su tiempo (la transmisión de vídeo en otra pestaña   — o en otro ordenador conectado a la misma conexión a Internet, incluso otras cosas ralentizando la ejecución de su JavaScript, como una animación pesada de JS en la página), pero debería ser lo suficientemente bueno como para darle una idea de con qué está trabajando.

+0

¿Estás midiendo gradualmente imágenes de diferentes tamaños? Hmmm, interesante ... eso debería eliminar un poco la incertidumbre. – Piskvor

+0

@Piskvor: Sí. Quiero decir, siempre va a ser solo una * indicación * en lugar de una cifra precisa, pero ... :-) –

+0

¿Seguirías sugiriendo el mismo enfoque ahora, en 2016 ... 6 años después: D quiero tener una prueba de velocidad en un subdominio de mi sitio web, ¿qué sugieres ahora? –

1
// Network connection - https://github.com/daniellmb/downlinkmax 
var connectionSpeed = function() 
{ 
    // Deal with vendor prefixes 
    var defaultSpeed = false, 
     navigator = window.navigator, 
     connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || null; 
    if(! connection) 
     return defaultSpeed; 

    // assume W3C Editor's Draft 09 October 2014 
    if('downlinkMax' in connection) 
    { 
     var downlinkMax = connection.downlinkMax; 
     if(! downlinkMax) 
      return defaultSpeed; 
     if(! isFinite(downlinkMax)) 
      return defaultSpeed; 
     return downlinkMax; 
    } 
    // assume W3C Working Draft 29 November 2012 
    if('bandwidth' in connection) 
    { 
     var bandwidth = connection.bandwidth; 
     if(! bandwidth) 
      return defaultSpeed; 
     if(isNaN(speed)) 
      return defaultSpeed; 
     // standardize connection.bandwidth value by converting megabytes per second (MB/s) to megabits per second (Mbit/s) 
     return bandwidth * 8; 
    } 
    // assume W3C Working Draft 07 June 2011 
    switch(connection.type) 
    { 
     // convert connection.type value to approximate downlink values 
     // speed estimate is based on the median downlink value for common devices in megabits per second (Mbit/s) 
     case 'none': 
      return 0; 
     case '2g': 
      return 0.134; 
     case 'bluetooth': 
     case 'cellular': 
      return 2; 
     case '3g': 
      return 8.95; 
     case '4g': 
      return 100; 
     case 'ethernet': 
      return 550; 
     case 'wifi': 
      return 600;    
    } 
    return defaultSpeed; 
}; 
Cuestiones relacionadas