La carga de un sitio web puede ser una experiencia muy diferente según las condiciones de la red. Por lo general, todo funciona sin inconvenientes cuando estás conectado a una red rápida, pero cuando estás sobre la marcha con un plan de datos limitado y una conexión irregular, o con una laptop con una conexión Wi-Fi lenta en una cafetería, la historia es diferente.
Una forma de abordar este problema es adaptar los recursos que publicas a los usuarios según la calidad de su conexión. Esto ahora es posible con la API de Network Information, que permite que las aplicaciones web accedan a información sobre la red del usuario.
Uso
Existen muchas formas de usar esta información de red para mejorar la experiencia del usuario:
- Cambia entre la entrega de contenido en alta definición y en baja definición según la red del usuario.
- Decide si deseas precargar recursos.
- Aplaza las cargas y descargas cuando los usuarios tengan una conexión lenta.
- Habilita el modo sin conexión si la calidad de la red no es lo suficientemente buena para cargar la app y usar las funciones.
- Advierte a los usuarios que realizar alguna acción (por ejemplo, mirar un video) a través de la red móvil podría costarles dinero.
- Úsala en tus estadísticas para recopilar datos sobre la calidad de red de los usuarios.
Muchas aplicaciones ya hacen algo similar. Por ejemplo, YouTube, Netflix y la mayoría de los otros servicios de video (o videollamadas) ajustan automáticamente la resolución durante la transmisión. Cuando se carga Gmail, les proporciona a los usuarios un vínculo para "cargar HTML básico (para conexiones lentas)".
![Un vínculo para cargar la versión en HTML básico de Gmail cuando los usuarios tengan conexiones lentas](https://web.developers.google.cn/static/articles/adaptive-serving-based-on-network-quality/image/a-link-load-basic-html-v-cc25c3a82b2cb.png?authuser=7&hl=es)
Cómo funciona
El objeto navigator.connection
contiene información sobre la conexión de un cliente. En la siguiente tabla, se explican sus propiedades.
Propiedad | Explicación |
---|---|
downlink |
Es la estimación del ancho de banda en megabits por segundo. |
effectiveType |
Es el tipo efectivo de la conexión, con los valores posibles 'slow-2g' , '2g' , '3g' o '4g' (incluye 4G y versiones posteriores). Se determina en función de la combinación de tiempo de ida y vuelta y velocidad de bajada. Por ejemplo, un vínculo descendente rápido combinado con una latencia alta tendrá un effectiveType más bajo debido a la latencia. |
onchange |
Es un controlador de eventos que se activa cuando cambia la información de conexión. |
rtt |
Es la latencia estimada de ida y vuelta de la conexión, expresada en milisegundos. |
saveData |
Es un valor booleano que define si el usuario solicitó un modo de uso de datos reducido. |
A continuación, se muestra cómo se ve esto cuando lo ejecutas en la consola del navegador:
Los valores effectiveType
también están disponibles a través de las sugerencias del cliente y te permiten comunicar el tipo de conexión del navegador a los servidores.
El objeto de escucha de eventos onchange
te permite adaptarte de forma dinámica a los cambios en la calidad de la red. Si aplazaste las cargas o descargas debido a condiciones de red deficientes, puedes confiar en el objeto de escucha de eventos para reiniciar la transferencia cuando detecte mejores condiciones de red. También puedes usarlo para notificar a los usuarios cuando cambia la calidad de la red. Por ejemplo, si pierde la señal de Wi-Fi y se cambia a una red celular, esto puede evitar transferencias de datos accidentales (y cargos 💸).
Usa el objeto de escucha de eventos onchange
como lo harías con cualquier otro objeto de escucha de eventos:
navigator.connection.addEventListener('change', doSomethingOnChange);
Conclusión
Los beneficios potenciales de la API de Network Information son grandes, en especial para los usuarios de redes y aplicaciones lentas que requieren mucho ancho de banda. Lo mejor de todo es que se puede utilizar como una técnica de mejora progresiva.