Como posso criar uma página JavaScript que detecta a velocidade da Internet do usuário e a mostra na página? Algo como "a velocidade da sua internet é ?? / ?? Kb / s ” .
javascript
download-speed
Sharon Haim Pour
fonte
fonte
Respostas:
É possível, até certo ponto, mas não será realmente preciso, a ideia é carregar a imagem com um tamanho de arquivo conhecido e, em seu
onload
evento, medir quanto tempo passou até que o evento foi acionado e dividir esse tempo no tamanho do arquivo de imagem.Exemplo pode ser encontrado aqui: Calcular velocidade usando javascript
Caso de teste que aplica a correção sugerida aqui:
A comparação rápida com o serviço de teste de velocidade "real" mostrou uma pequena diferença de 0,12 Mbps ao usar imagem grande.
Para garantir a integridade do teste, você pode executar o código com a otimização da ferramenta de desenvolvimento do Chrome ativada e ver se o resultado corresponde à limitação. (o crédito vai para user284130 :))
Coisas importantes a ter em mente:
A imagem que está sendo usada deve ser adequadamente otimizada e compactada. Caso contrário, a compactação padrão nas conexões do servidor da web poderá mostrar uma velocidade maior do que realmente é. Outra opção é usar um formato de arquivo não compactável, por exemplo, jpg. (obrigado Rauli Rajande por apontar isso e Fluxine por me lembrar )
O mecanismo de buster de cache descrito acima pode não funcionar com alguns servidores CDN, que podem ser configurados para ignorar os parâmetros da string de consulta, portanto, definindo melhor os cabeçalhos de controle de cache na própria imagem. (obrigado orcaman por apontar isso ) )
fonte
Bem, como estamos em 2017, agora você tem a API de informações de rede (embora com um suporte limitado entre navegadores a partir de agora) para obter algum tipo de estimativa de informações de velocidade de downlink:
Essa é uma estimativa de largura de banda efetiva em Mbits por segundo. O navegador faz essa estimativa a partir da taxa de transferência da camada de aplicativo observada recentemente em conexões ativas recentemente. Desnecessário dizer que a maior vantagem dessa abordagem é que você não precisa baixar nenhum conteúdo apenas para o cálculo da largura de banda / velocidade.
Você pode ver isso e outros atributos relacionados aqui
Devido ao seu suporte limitado e diferentes implementações nos navegadores (a partir de novembro de 2017), é altamente recomendável ler isso em detalhes
fonte
Como descrevi nesta outra resposta aqui no StackOverflow , você pode fazer isso cronometrando o download de arquivos de vários tamanhos (comece pequeno, aumente se a conexão parece permitir), garantindo através de cabeçalhos de cache e de forma que o arquivo seja realmente sendo lido do servidor remoto e não sendo recuperado do cache. Isso não requer necessariamente que você tenha um servidor próprio (os arquivos podem ser provenientes do S3 ou similar), mas você precisará de um local para obter os arquivos, a fim de testar a velocidade da conexão.
Dito isso, os testes de largura de banda point-in-time são notoriamente não confiáveis, pois são impactados por outros itens sendo baixados em outras janelas, a velocidade do seu servidor, links no caminho etc. etc. Mas você pode ter uma idéia aproximada usando esse tipo de técnica.
fonte
iframe
, por exemplo, você pesquisa oiframe
ou um cookie para conclusão. Se você usar umXMLHttpRequest
objeto para fazer a postagem, haverá um retorno de chamada para conclusão.Eu precisava de uma maneira rápida de determinar se a velocidade de conexão do usuário era rápida o suficiente para ativar / desativar alguns recursos em um site em que estou trabalhando. Criei este pequeno script que calcula a média do tempo necessário para baixar uma única imagem (pequena) várias vezes, está funcionando com muita precisão nos meus testes, sendo capaz de distinguir claramente entre 3G ou Wi-Fi, por exemplo, talvez alguém possa criar uma versão mais elegante ou até mesmo um plugin jQuery.
fonte
O truque da imagem é legal, mas nos meus testes ele estava carregando antes de algumas chamadas do ajax que eu queria concluir.
A solução adequada em 2017 é usar um trabalhador ( http://caniuse.com/#feat=webworkers ).
O trabalhador terá a seguinte aparência:
O arquivo js que chamará o Worker:
Código retirado de um pacote Plone que escrevi:
fonte
É melhor usar imagens para testar a velocidade. Mas se você precisar lidar com arquivos zip, o código abaixo funcionará.
Isso não funcionará muito bem com arquivos <10 MB. Você precisará executar resultados agregados em várias tentativas de download.
fonte
Eu precisava de algo semelhante, então escrevi https://github.com/beradrian/jsbandwidth . Esta é uma reescrita de https://code.google.com/p/jsbandwidth/ .
A idéia é fazer duas chamadas através do Ajax, uma para baixar e a outra para enviar pelo POST.
Deve funcionar com ambos
jQuery.ajax
ou Angular$http
.fonte
Graças à resposta Punit S, para detectar alterações dinâmicas na velocidade da conexão, você pode usar o seguinte código:
fonte