>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
JavaScript

Cómo desplegar tu propio test de velocidad con JavaScript puro sin servicios externos

¿Alguna vez has tenido una situación donde tu plan dice internet gigabit, los archivos se descargan rápido, pero tus llamadas de trabajo o el acceso a tu servidor casero son dolorosamente lentos? Tu primera reacción es abrir un sitio conocido de test de velocidad y pulsar el gran botón redondo. El problema es que los tests públicos muestran la velocidad hacia los servidores del proveedor, no el rendimiento real dentro de tu red local, entorno de oficina o nube personal.

Download OpenSpeedTest-Server V2.1

Descubrí el repositorio Speed-Test del proyecto OpenSpeedTest. El autor lo ha estado desarrollando durante más de diez años, desde 2011. Es una herramienta de prueba de ancho de banda de red de código abierto escrita completamente en HTML5 puro, CSS y JavaScript vanilla. Sin React, Vue, paquetes pesados ni dependencias externas.

Download from the Microsoft Store Download from the Mac App Store Download from the App Store Download from the Google Play Store Download from the Snap Store Download from the Docker Hub Download from the Helm Store Download from GitHub

Qué hay bajo el capó

Lo principal del código fuente es su elegancia. Toda la lógica del lado del cliente está comprimida en un script gzipeado de menos de 8 KB. La interfaz se renderiza completamente en SVG vectorial, por lo que se ve igual de nítida en un monitor antiguo y en una pantalla de smartphone 4K.

Para que la herramienta funcione, el lado del cliente solo necesita un navegador que soporte XMLHttpRequest (XHR2). Incluso el antiguo Internet Explorer 10 sirve. Del lado del servidor, basta con servir archivos estáticos a través de cualquier servidor web: Nginx, Apache, Caddy o Express.

No hay scripts de backend ocultos ni binarios complejos, por lo que la superficie de ataque es mínima. Esencialmente, estás sirviendo al navegador un conjunto de archivos estáticos, después de lo cual el cliente comienza a enviar una serie de solicitudes POST y GET paralelas de un tamaño específico.

Video Tutorial by Roberto Jorge Tech Video Tutorial by LanPad

Gestión de tests a través de parámetros URL

En lugar de construir menús de configuración complicados, el autor implementó el control mediante parámetros GET en la barra de direcciones. Esto es útil cuando quieres darle a un compañero un enlace listo con comportamiento preconfigurado.

Aquí tienes algunos parámetros útiles:

  • Iniciar el test automáticamente cuando se abre la página:
http://192.168.1.5?Run
  • Test de estrés de la red. Puedes establecer un preset o especificar la duración del test en segundos. Por ejemplo, ejecutar tráfico durante 300 segundos en ambas direcciones:
http://192.168.1.5?Stress=300

O una sintaxis más corta:

http://192.168.1.5?S=L
  • Limitar el número de flujos HTTP paralelos (por defecto es 6, máximo es 32):
http://192.168.1.5?XHR=4
  • Ejecutar una fase específica, por ejemplo solo subida o verificación de latencia:
http://192.168.1.5?Test=Upload

Si quieres recopilar estadísticas de un grupo de máquinas de oficina, en el archivo index.html puedes descomentar las variables saveData y especificar la dirección de tu webhook de base de datos:

var saveData = true;
var saveDataURL = "//metrics.internal.lan/save?data=";

Cómo ejecutarlo tú mismo

La forma más rápida de desplegar tu propio test de velocidad es una imagen Docker lista para usar. Está construida sobre Alpine ligero con un usuario Nginx no root:

docker run -d \
  --name openspeedtest \
  --restart=unless-stopped \
  -p 3000:3000 \
  -p 3001:3001 \
  openspeedtest/latest

Si prefieres trabajar con compose, la configuración es compacta:

version: '3.3'
services:
  speedtest:
    container_name: openspeedtest
    image: openspeedtest/latest
    restart: unless-stopped
    ports:
      - '3000:3000'
      - '3001:3001'

Después del inicio, la interfaz estará disponible en http://IP_СЕРВЕРА:3000.

Download OpenSpeedTest-Server V2.1

Si estás instalando el servicio detrás de tu propio proxy inverso, asegúrate de aumentar el límite del tamaño del cuerpo de la solicitud client_max_body_size a al menos 35 MB. De lo contrario, los tests de subida empezarán a fallar con un error 413.

Por cierto, si planeas probar velocidades superiores a 1 Gbps, el autor recomienda usar un host Linux. En Docker Desktop para macOS o Windows, la velocidad suele alcanzar el límite debido a la sobrecarga de virtualización y el puente de red.

Por qué mantener un test de velocidad local

Hay varios escenarios donde los servicios web habituales son inútiles:

  1. Diagnosticar Wi-Fi y repetidores. Cuando instalas un repetidor de señal en casa o en la oficina, la velocidad baja aproximadamente a la mitad. Probar el enlace localmente desde diferentes habitaciones te permite elegir con precisión el mejor lugar para un punto de acceso sin verse afectado por las fluctuaciones de tu conexión a internet externa.
  2. Verificar el impacto de las extensiones del navegador. A veces herramientas como iperf muestran un gigabit honesto, pero las páginas web se abren lentamente. Ejecuta OpenSpeedTest en tu perfil normal, luego en una ventana privada. La diferencia en los resultados mostrará cuántos milisegundos están consumiendo tus plugins instalados.
  3. Evaluar canales hacia una oficina remota. Cuando los trabajadores remotos se quejan del acceso lento al almacenamiento de archivos, un contenedor local en el servidor mostrará la velocidad real del túnel.

¿Vale la pena probarlo?

Speed-Test resuelve un problema específico sin anuncios, telemetría de terceros ni dependencias infladas. Si necesitas configurar redes locales regularmente, encontrar cables de par defectuosos o verificar el rendimiento de un NAS casero, mantén esta imagen a mano. Se despliega en un minuto, consume recursos mínimos y aporta un valor enorme.

Proyectos relacionados