¿Cómo puedo crear una página de JavaScript que detecte la velocidad de Internet del usuario y la muestre en la página? Algo así como "su velocidad de internet es ?? / ?? Kb / s " .
javascript
download-speed
Sharon Haim Pour
fuente
fuente
Respuestas:
Es posible hasta cierto punto, pero no será realmente preciso, la idea es cargar la imagen con un tamaño de archivo conocido y, en su
onload
caso, medir cuánto tiempo pasó hasta que se activó ese evento y dividir este tiempo en el tamaño del archivo de imagen.El ejemplo se puede encontrar aquí: calcular la velocidad usando javascript
Caso de prueba aplicando la solución sugerida allí:
La comparación rápida con el servicio de prueba de velocidad "real" mostró una pequeña diferencia de 0,12 Mbps cuando se usa una imagen general.
Para garantizar la integridad de la prueba, puede ejecutar el código con la limitación de la herramienta de desarrollo de Chrome habilitada y luego ver si el resultado coincide con la limitación. (el crédito va al usuario284130 :))
Cosas importantes a tener en cuenta:
La imagen que se usa debe estar correctamente optimizada y comprimida. Si no es así, la compresión predeterminada en las conexiones del servidor web puede mostrar una velocidad mayor de lo que realmente es. Otra opción es utilizar un formato de archivo no comprimible, por ejemplo, jpg. (gracias Rauli Rajande por señalar esto y Fluxine por recordármelo )
El mecanismo de bloqueo de caché descrito anteriormente podría no funcionar con algunos servidores CDN, que pueden configurarse para ignorar los parámetros de la cadena de consulta, por lo tanto, es mejor configurar los encabezados de control de caché en la imagen misma. (gracias orcaman por señalar esto ) )
fuente
Bueno, esto es 2017, por lo que ahora tiene API de información de red (aunque con un soporte limitado en todos los navegadores a partir de ahora) para obtener algún tipo de información estimada de velocidad de enlace descendente:
Esta es una estimación efectiva del ancho de banda en Mbits por segundo. El navegador realiza esta estimación a partir del rendimiento de la capa de aplicación recientemente observado a través de conexiones activas recientemente. No es necesario decir que la mayor ventaja de este enfoque es que no necesita descargar ningún contenido solo para calcular el ancho de banda / velocidad.
Puedes ver esto y otros atributos relacionados aquí
Debido a su soporte limitado y diferentes implementaciones en todos los navegadores (a partir de noviembre de 2017), recomendaría leer esto en detalle
fuente
Como describo en esta otra respuesta aquí en StackOverflow , puede hacerlo cronometrando la descarga de archivos de varios tamaños (comience con poco, aumente si la conexión parece permitirlo), asegurándose a través de los encabezados de caché y tal que el archivo sea realmente se lee desde el servidor remoto y no se recupera de la memoria caché. Esto no requiere necesariamente que tenga un servidor propio (los archivos podrían provenir de S3 o similar), pero necesitará un lugar desde donde obtener los archivos para probar la velocidad de conexión.
Dicho esto, las pruebas de ancho de banda en un punto en el tiempo son notoriamente poco confiables, ya que se ven afectadas por otros elementos que se descargan en otras ventanas, la velocidad de su servidor, enlaces en ruta, etc., etc. Pero puede tener una idea aproximada usando este tipo de técnica.
fuente
iframe
, por ejemplo, sondea eliframe
o una cookie para completar. Si usa unXMLHttpRequest
objeto para hacer la publicación, hay una devolución de llamada para completar.Necesitaba una forma rápida de determinar si la velocidad de conexión del usuario era lo suficientemente rápida como para habilitar / deshabilitar algunas funciones en un sitio en el que estoy trabajando, hice este pequeño script que promedia el tiempo que toma descargar una sola imagen (pequeña) varias veces, funciona con bastante precisión en mis pruebas, pudiendo distinguir claramente entre 3G o Wi-Fi, por ejemplo, tal vez alguien pueda hacer una versión más elegante o incluso un complemento jQuery.
fuente
El truco de la imagen es genial, pero en mis pruebas se estaba cargando antes de algunas llamadas ajax que quería completar.
La solución adecuada en 2017 es utilizar un trabajador ( http://caniuse.com/#feat=webworkers ).
El trabajador se verá así:
El archivo js que invocará al trabajador:
Código tomado de un paquete de Plone que escribí:
fuente
Es mejor usar imágenes para probar la velocidad. Pero si tiene que lidiar con archivos zip, el siguiente código funciona.
Esto no funcionará muy bien con archivos <10 MB. Tendrá que ejecutar resultados agregados en múltiples intentos de descarga.
fuente
Necesitaba algo similar, así que escribí https://github.com/beradrian/jsbandwidth . Esta es una reescritura de https://code.google.com/p/jsbandwidth/ .
La idea es hacer dos llamadas a través de Ajax, una para descargar y la otra para cargar a través de POST.
Debería funcionar con ambos
jQuery.ajax
o Angular$http
.fuente
Gracias a la respuesta de Punit S, para detectar el cambio dinámico de la velocidad de conexión, puede usar el siguiente código:
fuente