Jak mogę utworzyć stronę JavaScript, która wykryje prędkość Internetu użytkownika i wyświetli go na stronie? Coś w stylu „Twoja prędkość Internetu wynosi ?? / ?? Kb / s ” .
javascript
download-speed
Sharon Haim Pour
źródło
źródło
Odpowiedzi:
Jest to w pewnym stopniu możliwe, ale nie będzie naprawdę dokładne, pomysł polega na załadowaniu obrazu o znanym rozmiarze pliku, a następnie w jego
onload
zdarzeniu zmierz, ile czasu upłynęło do wyzwolenia tego zdarzenia, i podziel ten czas na rozmiar pliku obrazu.Przykład można znaleźć tutaj: Oblicz prędkość za pomocą javascript
Przypadek testowy z zastosowaniem sugerowanej tam poprawki:
Szybkie porównanie z „rzeczywistą” usługą testowania prędkości wykazało niewielką różnicę 0,12 Mb / s przy użyciu dużego obrazu.
Aby zapewnić integralność testu, możesz uruchomić kod z włączonym ograniczeniem narzędzia deweloperskiego Chrome, a następnie sprawdzić, czy wynik odpowiada ograniczeniu. (kredyt trafia do użytkownika 284130 :))
Ważne rzeczy, o których należy pamiętać:
Używany obraz powinien być odpowiednio zoptymalizowany i skompresowany. Jeśli tak nie jest, wówczas domyślna kompresja połączeń przez serwer WWW może wykazywać większą prędkość niż jest w rzeczywistości. Inną opcją jest użycie nieskompresowanego formatu pliku, np. Jpg. (dzięki Rauli Rajande za zwrócenie na to uwagi i Fluxine za przypomnienie )
Opisany powyżej mechanizm pomijania pamięci podręcznej może nie działać z niektórymi serwerami CDN, które można skonfigurować tak, aby ignorowały parametry ciągu zapytania, dlatego lepiej ustawić nagłówki kontroli pamięci podręcznej na samym obrazie. (dzięki orcaman za zwrócenie na to uwagi ) )
źródło
Cóż, to jest 2017 rok, więc masz teraz Network Information API (choć z ograniczoną obsługą w różnych przeglądarkach), aby uzyskać szacunkowe informacje o prędkości łącza w dół:
Jest to efektywne oszacowanie przepustowości w Mb / s na sekundę. Przeglądarka dokonuje tego oszacowania na podstawie ostatnio zaobserwowanej przepustowości warstwy aplikacji dla ostatnio aktywnych połączeń. Nie trzeba dodawać, że największą zaletą tego podejścia jest to, że nie trzeba pobierać żadnych treści tylko w celu obliczenia przepustowości / prędkości.
Możesz zobaczyć to i kilka innych powiązanych atrybutów tutaj
Ze względu na ograniczoną obsługę i różne implementacje w różnych przeglądarkach (od listopada 2017 r.) Zdecydowanie zalecamy szczegółowe przeczytanie tego
źródło
Jak zarysowuję w tej innej odpowiedzi tutaj na StackOverflow , możesz to zrobić, odmierzając czas pobierania plików o różnych rozmiarach (zacznij od małego, zwiększ, jeśli połączenie wydaje się na to pozwalać), zapewniając przez nagłówki pamięci podręcznej i takie, że plik jest naprawdę czyta się ze zdalnego serwera i nie jest pobierana z pamięci podręcznej. Niekoniecznie wymaga to posiadania własnego serwera (pliki mogą pochodzić z S3 lub podobnego), ale będziesz potrzebować skądś, aby pobrać pliki, aby przetestować szybkość połączenia.
To powiedziawszy, testy przepustowości punktu w czasie są notorycznie niewiarygodne, ponieważ mają na nie wpływ inne elementy pobierane w innych oknach, prędkość serwera, łącza na trasie itp. Itp. Ale możesz mieć ogólny pomysł używając tego rodzaju techniki.
źródło
iframe
na przykład przesyłasz formularz do ukrytego , odpytujesziframe
plik cookie lub plik cookie w celu uzupełnienia. Jeśli użyjeszXMLHttpRequest
obiektu do wykonania posta, nastąpi oddzwonienie do ukończenia.Potrzebowałem szybkiego sposobu, aby ustalić, czy szybkość połączenia użytkownika jest wystarczająco duża, aby włączyć / wyłączyć niektóre funkcje w witrynie, nad którą pracuję. Stworzyłem ten mały skrypt, który uśrednia czas potrzebny do pobrania pojedynczego (małego) obrazu wiele razy działa całkiem dokładnie w moich testach, będąc w stanie wyraźnie odróżnić na przykład 3G lub Wi-Fi, może ktoś może stworzyć bardziej elegancką wersję, a nawet wtyczkę jQuery.
źródło
Sztuczka z obrazem jest fajna, ale w moich testach ładowała się przed niektórymi wywołaniami ajax, które chciałem zakończyć.
Właściwym rozwiązaniem w 2017 roku jest skorzystanie z pracownika ( http://caniuse.com/#feat=webworkers ).
Pracownik będzie wyglądał następująco:
Plik js, który wywoła proces roboczy:
Kod pobrany z pakietu Plone, który napisałem:
źródło
Lepiej jest używać obrazów do testowania prędkości. Ale jeśli masz do czynienia z plikami zip, poniższy kod działa.
To nie będzie działać dobrze z plikami <10 MB. Będziesz musiał uruchomić zagregowane wyniki przy wielu próbach pobierania.
źródło
Potrzebowałem czegoś podobnego, więc napisałem https://github.com/beradrian/jsbandwidth . To jest przepisanie https://code.google.com/p/jsbandwidth/ .
Chodzi o to, aby wykonać dwa połączenia przez Ajax, jeden do pobrania, a drugi do przesłania przez POST.
Powinien działać z oboma
jQuery.ajax
lub Angular$http
.źródło
dzięki odpowiedzi Punit S, w celu wykrycia dynamicznej zmiany prędkości połączenia, możesz użyć następującego kodu:
źródło