Como implementar seu próprio teste de velocidade com JavaScript puro sem serviços externos
Já passou pela situação em que seu plano diz internet gigabit, os arquivos baixam rapidamente, mas sua chamada de trabalho ou o acesso ao seu servidor doméstico é dolorosamente lento? Sua primeira reação é abrir um site conhecido de teste de velocidade e clicar no grande botão redondo. O problema é que os testes públicos mostram a velocidade para os servidores do provedor, não a vazão real dentro da sua rede local, ambiente de escritório ou nuvem pessoal.
Encontrei o repositório Speed-Test do projeto OpenSpeedTest. O autor o desenvolve há mais de dez anos, desde 2011. É uma ferramenta de teste de largura de banda de rede de código aberto escrita inteiramente em HTML5 puro, CSS e JavaScript vanilla. Sem React, Vue, bundles pesados ou dependências externas.
Como funciona por baixo dos panos
O destaque principal do código-fonte é sua elegância. Toda a lógica do lado do cliente está compactada em um script gzipped de menos de 8 KB. A interface é inteiramente renderizada em SVG vetorial, então fica igualmente nítida em um monitor antigo e em uma tela 4K de smartphone.
Para a ferramenta funcionar, o lado do cliente só precisa de um navegador que suporte XMLHttpRequest (XHR2). Até o antigo Internet Explorer 10 funciona. No lado do servidor, basta servir arquivos estáticos através de qualquer servidor web: Nginx, Apache, Caddy ou Express.
Não há scripts de backend ocultos ou binários complexos, então a superfície de ataque é mínima. Essencialmente, você está servindo ao navegador um conjunto de arquivos estáticos, após o qual o cliente começa a enviar uma série de requisições POST e GET paralelas de um tamanho especificado.
Gerenciando testes via parâmetros de URL
Em vez de construir menus de configurações complexos, o autor implementou o controle via parâmetros GET na barra de endereços. Isso é conveniente se você quiser dar aos colegas um link pronto com comportamento pré-configurado.
Aqui estão alguns parâmetros úteis:
- Iniciar o teste automaticamente assim que a página abrir:
http://192.168.1.5?Run
- Teste de estresse da rede. Você pode definir um preset ou especificar a duração do teste em segundos. Por exemplo, rodar o tráfego por 300 segundos em ambas as direções:
http://192.168.1.5?Stress=300
Ou uma sintaxe mais curta:
http://192.168.1.5?S=L
- Limitar o número de streams HTTP paralelos (padrão é 6, máximo é 32):
http://192.168.1.5?XHR=4
- Executar uma fase específica, por exemplo apenas upload ou verificação de latência:
http://192.168.1.5?Test=Upload
Se você quiser coletar estatísticas de um parque de máquinas do escritório, no arquivo index.html você pode descomentar as variáveis saveData e especificar o endereço do webhook do seu banco de dados:
var saveData = true;
var saveDataURL = "//metrics.internal.lan/save?data=";
Como executar por conta própria
A forma mais rápida de implementar seu próprio teste de velocidade é uma imagem Docker pronta. Ela é construída sobre o Alpine leve com um usuário Nginx não-root:
docker run -d \
--name openspeedtest \
--restart=unless-stopped \
-p 3000:3000 \
-p 3001:3001 \
openspeedtest/latest
Se você prefere trabalhar com compose, a configuração fica compacta:
version: '3.3'
services:
speedtest:
container_name: openspeedtest
image: openspeedtest/latest
restart: unless-stopped
ports:
- '3000:3000'
- '3001:3001'
Após a inicialização, a interface estará disponível em http://IP_СЕРВЕРА:3000.
Se você estiver instalando o serviço atrás do seu próprio proxy reverso, aumente o limite de tamanho do corpo da requisição client_max_body_size para pelo menos 35 MB. Caso contrário, os testes de upload começarão a falhar com erro 413.
A propósito, se você planeja testar velocidades acima de 1 Gbps, o autor recomenda usar um host Linux. No Docker Desktop para macOS ou Windows, a velocidade frequentemente atinge o teto devido à virtualização e overhead da bridge de rede.
Por que manter um teste de velocidade local
Existem vários cenários onde serviços web regulares são inúteis:
- Diagnosticando Wi-Fi e repetidores. Quando você instala um repetidor de sinal em casa ou no escritório, a velocidade cai em média pela metade. Testar o link localmente de diferentes cômodos permite escolher com precisão o melhor local para um ponto de acesso sem ser afetado por flutuações na sua conexão externa de internet.
- Verificando o impacto de extensões do navegador. Às vezes ferramentas como iperf mostram um honesto gigabit, mas as páginas web abrem lentamente. Execute o OpenSpeedTest no seu perfil normal, depois em uma janela privativa. A diferença nos resultados mostrará quantos milissegundos seus plugins instalados estão consumindo.
- Avaliando canais para um escritório remoto. Quando trabalhadores remotos reclamam de acesso lento ao armazenamento de arquivos, um container local no servidor mostrará a velocidade real do túnel.
Vale a pena experimentar
O Speed-Test resolve um problema específico sem anúncios, telemetria de terceiros ou dependências inchadas. Se você precisa regularmente configurar redes locais, encontrar cabos patch com defeito ou verificar o desempenho de um NAS doméstico, mantenha essa imagem à disposição. Ela é implementada em um minuto, consome recursos mínimos e traz um valor enorme.
Projetos relacionados











